2013-05-07 2 views
-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. 

Так что я думаю, что моя главная проблема в том, что переменные Арен по какой-то причине. Любая помощь, которая может быть предоставлена, будет НАСТОЯТЕЛЬНО оценена!

Спасибо Ребята

+0

Woops, извините забыл включить - этот вывод, я получаю это для КАЖДОГО сервера в списке. Поэтому он вызывает каждую строку в файле, как я ожидал, просто не назначая эту переменную должным образом. – user2283234

ответ

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 
) 

В любое время вы установите переменную внутри а, для блока, вы должны использовать замедленное расширение, чтобы прочитать его.

+0

Это было! Спасибо огромное! Я должен буду помнить это о Блоках. – user2283234

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 
) 
+0

О, ничего себе, я чувствую себя немым. Да, это здорово! Спасибо! – user2283234

Смежные вопросы