0

下面是我想要做的,在远程服务器上运行 cmd。

serverList.txt 中的一个示例:

服务器名称&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

4

2 回答 2

1

尝试这个:

@echo on
cd /d %~dp0
setlocal EnableDelayedExpansion
设置“serverList=serverList.txt”
for /f "usebackq tokens=1,2* delims=&" %%A in ("%serverList%") DO (
    SET“目录=%%B”
    wmic /node:%%A 进程调用 create "cmd /c cd /d "!directory!" & "!directory!\hello.cmd""
)
本地端
暂停
于 2013-05-28T07:05:34.257 回答
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
于 2013-05-28T07:45:53.493 回答