在批处理中将文件内容分配给变量

时间:2013-05-07 17:14:33

标签: batch-file

我有一个充满服务器名称的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.

所以我想我的主要问题是变量不会因任何原因而变得坚持。任何可以提供的帮助都将非常感激!

谢谢大家

2 个答案:

答案 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)

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

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
)