我真的看过这里的多个例子,但我不能让它工作 - 所有的例子都有一种情况,你只需要调用一个实际上已经结束的命令,我需要保持我的运行。这就是我需要做的。
要配置网络设备,我可以选择使用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命令
答案 0 :(得分: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部署到您正在运行的任何位置。
答案 1 :(得分: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
)
答案 2 :(得分: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"
答案 3 :(得分: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"
此外,I see it suggested即使标题为空,也应始终为start命令提供标题。所以....
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的注释。你在另一个回答中提到击中控制+ c杀死所有窗口。这是正常行为,但使用/ c运行CMD应该使控件+ c仅适用于当前窗口。在另一个答案中更改以下行:
start %%b.bat
为...
start cmd /c %%b.bat
(或类似的东西)应该让你在循环产生的各个窗口中使用CTRL + C.