0

我真的看过这里的多个示例,但我无法让它工作 - 所有示例都有这样一种情况,您只需调用一个实际结束的命令,我需要保持我的运行。这是我需要做的。

要配置网络设备,我可以使用arp命令和 ping 命令来配置,但这些都需要在同一个命令提示符下执行,但每个设备都需要在自己的窗口中。

我需要运行arp -s 192.168.5.5 00-CC-CC-CC-CC-CC,完成后,我需要运行ping -l 408 -t 192.168.5.5. 这两个命令必须在同一个命令窗口中运行。我想同时打开其中的 30 个,在该特定窗口中解析和 ping 相同的地址,但在每个其他窗口中使用不同的地址(我希望这是有道理的)。

现在,我可以让它运行,但它会等待第一个命令完成,然后再开始第二个。我用过START,但这也不起作用。

是的,我想我可以创建 30 个不同的批处理文件,但这会破坏对象,因为我需要配置 500 多个设备,因此创建 500 个批处理文件需要同样长的时间;除非批处理文件可以为我创建所有必需的批处理文件?

所以,我有一个 excel 电子表格,可以在批处理文件中创建我需要的所有行,我希望使用它:

start cmd.exe /K arp -s 192.168.5.5 00-40-8C-D4-FB-BC && ping -l 408 -t 192.168.5.5   
start cmd.exe /K arp -s 192.168.5.6 00-40-8C-D4-F9-A9 && ping -l 408 -t 192.168.5.6    
start cmd.exe /K arp -s 192.168.5.7 00-40-8C-D4-FB-F6 && ping -l 408 -t 192.168.5.7    
start cmd.exe /K arp -s 192.168.5.8 00-40-8C-D4-FC-70 && ping -l 408 -t 192.168.5.8  
start cmd.exe /K arp -s 192.168.5.9 00-40-8C-D4-FB-F4 && ping -l 408 -t 192.168.5.9
start cmd.exe /K arp -s 192.168.5.10 00-40-8C-D4-FB-F8 && ping -l 408 -t 192.168.5.10

所以使用上面的,只有第一个命令实际运行。如果我将它设置为 ping 只说 300 次,它会切换到下一个,但这会再次破坏对象,因为我需要一次执行 30 个设备,因此等待每个设备先完成将永远需要。

也许我在这里完全走错了路,也许有人有更好的主意?请记住,上述每个命令都必须在其自己的命令提示符窗口中运行,否则如果您尝试同时执行太多命令,arp 命令将失败。

为了清楚起见,我需要运行 arp 命令,完成后运行 ping 命令

4

4 回答 4

1

你需要逃避你的 &&s,也许只需要 &:

start cmd.exe /K arp -s 192.168.5.5 00-40-8C-D4-FB-BC ^& ping -l 408 -t 192.168.5.5

但是,在 cmd 中转义会很快变得棘手。我建议您使用所需的一切创建一个 DoPing.cmd:

arp -s %1 %2
ping -l 408 -t %1

并从您生成的 cmd 调用它:

start cmd.exe /K DoPing.cmd 192.168.5.5 00-40-8C-D4-FB-BC

当然,这意味着您需要将 DoPing.cmd 部署到您正在运行的任何地方。

于 2013-04-22T19:45:16.677 回答
1

假设您的数据以这种方式保存在文本文件中:

192.168.5.5 00-40-8C-D4-FB-BC
192.168.5.6 00-40-8C-D4-F9-A9
192.168.5.7 00-40-8C-D4-FB-F6
192.168.5.8 00-40-8C-D4-FC-70
192.168.5.9 00-40-8C-D4-FB-F4
192.168.5.10 00-40-8C-D4-FB-F8

下面的批处理文件创建多个批处理文件,每个批处理文件都有所需的命令,然后启动它们。每个创建的批处理文件在完成其业务后都会自行删除。

@echo off
for /F "tokens=1,2" %%a in (theDataFile.txt) do (
   echo @echo off > %%b.bat
   echo arp -s %%a %%b >> %%b.bat
   echo ping -l 408 -t %%a >> %%b.bat
   echo del %%b.bat ^& exit >> %%b.bat
   start %%b.bat
)
于 2013-04-22T19:54:42.437 回答
0

尝试在整个论点周围引用引号,也可以使用 & 而不是 &&

例如

start cmd.exe /K "arp -s 192.168.5.5 00-40-8C-D4-FB-BC & ping -l 408 -t 192.168.5.5"
于 2013-04-22T19:39:25.950 回答
0

问题是您需要引用传递给 CMD 的参数。您的原件是:

start cmd.exe /K arp -s 192.168.5.5 00-40-8C-D4-FB-BC && ping -l 408 -t 192.168.5.5

此语法将启动 CMD 窗口并将 ARP 命令作为参数传递给该窗口,但不是 && ping 部分。相反,这被视为在 START 之后运行的命令。

为了纠正这个问题,我们可以添加引号,将 arp 和 ping 作为单个参数显式传递给 CMD。

start cmd.exe /K "arp -s 192.168.5.5 00-40-8C-D4-FB-BC && ping -l 408 -t 192.168.5.5"

此外,我看到它建议应该始终为启动命令提供一个标题,即使标题为空。所以....

start "" cmd.exe /K "arp -s 192.168.5.5 00-40-8C-D4-FB-BC && ping -l 408 -t 192.168.5.5"

当然,您还有更多选择。&& 只有在第一个返回成功时才运行第二个命令。所以理论上 & 可以用来确保第二个命令总是运行。然后再一次,如果 arp 调用失败,则没有理由同时进行 ping 操作,因此 && 可以...

我假设您故意打开新的 CMD 窗口,以便您可以看到结果,但您始终可以使用 /c 而不是 /k 来自动关闭它们。

作为 /c 的注释。您在对另一个答案的回应中提到,点击 control+c 会杀死所有窗口。这是正常行为,但使用 /c 运行 CMD 应该使 control+c 仅适用于当前窗口。在另一个答案中更改以下行:

start %%b.bat

到...

start cmd /c %%b.bat

(或类似的东西)应该让您在循环产生的各个窗口中使用 CTRL+C。

于 2013-04-23T02:53:03.913 回答