gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:37:36 26 4
gpt4 key购买 nike

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

当我运行下面的脚本时,它没有返回任何错误并且返回值为 0。但是当我检查实际服务器时 x.cmd 什么也没做。 x.cmd 手动运行后工作正常。

如果可能请指出我脚本的错误。我的另一个问题是文件夹路径太长(但如果我是对的,它在微软的限制之内)。 :) 谢谢你的时间。

@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,因为变量没有在 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 中给出绝对路径.这意味着它将在 cmd.exe 所在的远程计算机上的目录中创建,该目录正在执行 x.cmd。在大多数系统中,这将是 %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 查看它们。

关于windows - 批处理脚本,在服务器上调用 cmd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16708633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com