嵌套循环:使用批处理脚本将当前屏幕分辨率存储为各种远程计算机的变量

问题描述

我需要获取每个远程计算机的当前屏幕分辨率(相同的IP存储在.txt文件中)并将其作为变量存储在脚本中,以供进一步使用。

我能够遍历.txt文件中的机器,并且能够将屏幕分辨率存储为变量,但是我不能为所有机器循环执行。 谁能告诉我我要去哪里错了?

如何在后面的代码中首先使用 %% a 设置?
Set MyFile=VMs.txt
rem VMs.txt contains IPs of the machines

for /f "usebackq delims=" %%a in ("%MyFile%") do call :compare
    
:compare
for /f "tokens=2 delims==" %%i in ('wmic /node:"%%a" path Win32_VideoController get CurrentVerticalResolution /value ^| find "="') do set height=%%i
echo %height% 

解决方法

您尝试在被调用的子例程library(tidyr) df <- gather(df,'Var2','Value' 2:4) 中访问for循环元变量%%a,但失败。您可以:

  1. :compare作为参数传递给子例程,并通过%%a在那里进行访问:

    %1

    Set "MyFile=VMs.txt" rem VMs.txt contains IPs of the machines for /f "usebackq delims=" %%a in ("%MyFile%") do call :compare %%a goto :EOF :compare for /f "tokens=2 delims==" %%i in ('wmic /node:"%~1" path Win32_VideoController get CurrentVerticalResolution /value ^| find "="') do set "height=%%i" echo(%height% 中的~字符可确保传递的参数未加引号(尽管此处可能不需要),因此表达式%~1周围只有一对引号。

    请注意命令"%~1",该命令可防止在第一个goto :EOF循环完成后无意执行随后的代码。

    还要注意引用的for /f语法,该语法可以保护特殊字符并避免无意尾随空格。

  2. 或者确保包含set的子例程中的代码在%%a循环的主体中运行,因为for元变量是全局变量,但是它们可以仅在for循环上下文中访问,即使调用来自循环主体,该循环上下文也不再适用于子例程。

    要在子例程中重新建立循环上下文,只需将相关代码放入仅循环一次的for循环中:

    for