-1

我有一个充满服务器名称的 txt 文件 - 每行一个名称。我需要读取该文件的内容并将服务器名称分配给一个变量,完成一些命令,然后为下一个服务器名称再次执行此操作。这是我到目前为止所得到的:

for /f "tokens=*" %%a in (%UserProfile%\Desktop\servers.txt) do (
    set server=%%a 
    set loc=%UserProfile%\Desktop\GPOResult_%server%
    gpresult /S %server% /H %loc% /F
)

这是我关闭回声时从中得到的输出:

(
set server=<ServerName>
set loc=C:\Users\<user>\Desktop\GPOResult_
gpresult /S /H /F
)
ERROR: Invalid syntax. Value expected for '/S'
Type "GPRESULT /?" for usage.

所以我想我的主要问题是变量不会因为任何原因而粘住。任何可以提供的帮助将不胜感激!

多谢你们

4

2 回答 2

1

尝试这个

 Setlocal EnableDelayedExpansion
 for /f "tokens=*" %%a in (%UserProfile%\Desktop\servers.txt) do (
   set server=%%a 
   set loc=%UserProfile%\Desktop\GPOResult_!server!
   gpresult /S !server! /H !loc! /F
 )

每当您在 for 块中设置变量时,都必须使用延迟扩展来读取它。

于 2013-05-07T17:50:36.327 回答
1

当变量for在 a或if命令中更改其值时,需要延迟扩展。但是,在您的情况下,没有必要,因为 %%a 可替换参数是更改其值的部分,也就是说,您不需要在代码中使用变量:

set loc=%UserProfile%\Desktop\GPOResult_%%a
for /f "tokens=*" %%a in (%UserProfile%\Desktop\servers.txt) do (
    gpresult /S %%a /H %loc% /F
)

或者更简单:

for /f "tokens=*" %%a in (%UserProfile%\Desktop\servers.txt) do (
    gpresult /S %%a /H %UserProfile%\Desktop\GPOResult_%%a /F
)
于 2013-05-08T01:05:34.750 回答