下面是我要做的,在远程服务器上运行cmd。
serverList.txt中的一个示例:
servername& e:\ a \ b \ c \ abc edf \ abc \
@echo on
cd /d %~dp0
setlocal EnableDelayedExpansion
set serverList=serverList.txt
for /f "usebackq tokens=1,2* delims=&" %%A in ("%serverList%") DO (
SET directory = %%B
wmic /node:%%A process call create "cmd /c cd /d !directory! & !directory!\hello.cmd"
)
endlocal
Pause
但正如你所看到的,目录的路径中有一个空格,我试过双引号但没有帮助。它没有做任何事情,没有它完美运作的空间。
想知道我哪里出错了。非常感谢!
JS
答案 0 :(得分:1)
试试这个:
@echo on cd /d %~dp0 setlocal EnableDelayedExpansion set "serverList=serverList.txt" for /f "usebackq tokens=1,2* delims=&" %%A in ("%serverList%") DO ( SET "directory=%%B" wmic /node:%%A process call create "cmd /c cd /d "!directory!" & "!directory!\hello.cmd"" ) endlocal Pause
答案 1 :(得分:0)
您不需要延迟扩展,因为您可以使用%% B
如果失败,请在WMIC之前放置一个ECHO,并查看它打印到控制台的内容。
@echo on
cd /d %~dp0
set "serverList=serverList.txt"
for /f "usebackq tokens=1,2* delims=&" %%A in ("%serverList%") DO (
wmic /node:%%A process call create "cmd /c cd /d "%%B" & hello.cmd "
)
endlocal
Pause
或者踢球,试试这个。 Wmic是一个使用forIndo命令的奇怪工具。
@echo on
cd /d %~dp0
set "serverList=serverList.txt"
for /f "usebackq tokens=1,2* delims=&" %%A in ("%serverList%") DO call :next "%%A" "%%B"
pause
goto :eof
:next
wmic /node:%~1 process call create "cmd /c cd /d "%~2" & hello.cmd "
goto :EOF