我有一个充满服务器名称的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.
所以我想我的主要问题是变量不会因任何原因而变得坚持。任何可以提供的帮助都将非常感激!
谢谢大家
答案 0 :(得分: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块中设置变量时,都必须使用延迟扩展来读取它。
答案 1 :(得分:1)
变量在for
或if
命令中更改其值时,需要延迟扩展。但是,在您的情况下,没有必要,因为%%可替换参数是更改其值的部分,也就是说,您不需要在代码中使用变量:
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
)