繁体   English   中英

批处理脚本,在服务器上调用cmd

[英]Batch script, call cmd on servers

我试图从列表中的许多服务器调用x.cmd,基本上x.cmd将返回一个日志文件,因此我会将输出日志文件复制到一个新文件夹中。 该列表中的结构为:服务器名称和我将创建的服务器上的x.cmd的文件夹路径以及输出文件夹名称

当我运行下面的脚本时,它不返回任何错误并且返回值为0。但是当我在实际服务器上进行检查时,x.cmd只是不执行任何操作。 一旦我手动运行x.cmd,它就可以正常工作。

请尽可能指出我脚本的错误。 我的另一个担心是文件夹路径太长(但是如果我正确的话,它在Microsoft的限制之内)。 :) 谢谢你的时间。

@echo on

cd /d %~dp0

setlocal EnableDelayedExpansion
set serverList=List.txt

for /f "usebackq tokens=1,2,3* delims=&" %%A in ("%serverList%") DO (

        set remoteCmd=x.cmd
        wmic /node:%%A process call create "%%B\remoteCmd"
        pause
        robocopy %%B\logs Output\%%C /e
)
endlocal
Pause 

JS

问题似乎是您实际上x.cmd在远程服务器上调用x.cmd ,因为在wmic调用中未替换该变量。 remoteCmd的定义移出循环,并将remoteCmd用百分号括在wmic调用中:

set serverList=List.txt
set remoteCmd=x.cmd    
for /f "usebackq tokens=1,2,3* delims=&" %%A in ("%serverList%") DO (
        wmic /node:%%A process call create "%%B\%remoteCmd%"
        pause
        robocopy %%B\logs Output\%%C /e
)

更新1:由于您在shell上获得了带有processIDError level=0的响应,可以肯定地说x.cmd实际上是在远程服务器上启动的。 日志文件没有出现在x.cmd所在的目录中的x.cmd ,很可能是因为在x.cmd没有为日志文件提供绝对路径。 这意味着它将在执行x.cmdcmd.exe所在的远程计算机上的目录中创建。 在大多数系统中,这将是%WINDIR%\\system32 ,即c:\\windows\\system32

更新2:如果没有修改x.cmd的选项,则需要在调用它之前更改其目录的路径。 您可以这样做:

wmic /node:%%A process call create "cmd /c cd /d %%B & x.cmd"

注意: cd /d允许您甚至在不同驱动器之间更改目录。

更新3:由于目录名称中有空格,因此您需要用引号将它们括起来-必须将其转义,因为已经有外部引号将整个远程命令括起来了。 因此,这意味着:

wmic /node:%%A process call create "cmd /c \"cd /d %%B\" & x.cmd"

注意:内引号的一种可能替代方法是使用所涉及目录的8.3文件名。 您可以在命令行上使用dir /x查看这些内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM