2013-05-28 92 views
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

+0

是你使用的确切批处理文件吗?应该使用'!directory!'而不是'%directory%'来使'EnableDelayedExpansion'正常工作。我不知道在目录名称中如何使用或不使用空格。 –

+0

耶!试过!目录!但没有运气。它就像“cmd/c cd/d %% B&%% B \ hello.cmd”,并且完美运行直到我发现一些目录之间有空格。 – user2381130

回答

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

只是试过,并没有工作。认为报价应该在不同的地方结束? – user2381130

+0

错误是无效的动词开关 – user2381130

+0

我通过robocopy“!目录!”做了一个robocopy。实际上它确实采用了空间的整个路径。所以想知道那个世界可能有什么问题。 :( – user2381130

0

你不需要延迟扩展,你可以使用%%乙

如果失败的地方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 
+0

尝试过,但在我的结尾没有运气:(思考wmic有一个不同的结构比我想象的。 – user2381130

相关问题