批处理文件传递具有空格的路径

时间:2013-05-28 06:17:16

标签: windows batch-file

下面是我要做的,在远程服务器上运行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

2 个答案:

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