我真的看过这里的多个例子,但我无法让它工作 - 所有的例子都有一种情况,你只需要调用一个实际上已经结束的命令,我需要保持我的运行 . 这就是我需要做的 .
要配置网络设备,我可以选择使用 arp
命令和ping命令,但这些命令需要在同一个命令提示符中执行,但每个设备都需要在它自己的窗口中 .
我需要运行 arp -s 192.168.5.5 00-CC-CC-CC-CC-CC
,当它完成后,我需要运行 ping -l 408 -t 192.168.5.5
. 这两个命令必须在同一个命令窗口中运行 . 我想打开让我们同时说30个这样的,在特定窗口中arp'ing和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 回答
你需要逃避你的&& s,也许改成只是&:
但是,在cmd中转义可能会很快变得棘手 . 我建议您创建一个包含所需内容的DoPing.cmd:
并从生成的cmd中调用它:
当然,这意味着您需要将DoPing.cmd部署到您正在运行的任何位置 .
我们假设您的数据以这种方式存在于文本文件中:
下面的批处理文件创建多个批处理文件,每个文件都包含所需的命令,然后启动它们 . 每个创建的批处理文件在完成其业务后删除自身 .
试试整个论点的引用,也可以使用&而不是&&
例如
问题是你需要引用传递给CMD的参数 . 你的原作是:
此语法将启动CMD窗口并将ARP命令作为参数传递给该窗口,但不传递&& ping部分 . 相反,它被视为在START之后运行的命令 .
为了纠正这个问题,我们可以添加引号,将明确地将arp和ping作为单个参数传递给CMD .
此外,I see it suggested即使 Headers 为空,也应始终为start命令提供 Headers . 所以....
当然你还有其他选择 . 仅当第一个命令返回成功时,&&才会运行第二个命令 . 所以理论上可以用来确保第二个命令始终运行 . 如果arp调用失败,那么没有理由同时ping这个&&适用于......
我假设您正在故意打开新的CMD窗口,以便您可以看到结果,但您可以始终使用/ c而不是/ k来自动关闭它们 .
作为/ c的注释 . 你在回答另一个答案时提到击中控制c会杀死所有窗口 . 这是正常行为,但使用/ c运行CMD应该使控件c仅适用于当前窗口 . 在另一个答案中更改以下行:
至...
(或类似的东西)应该让你在循环产生的各个窗口中使用CTRL C.