这个网站太棒了!我试图在 Server 2012 上运行一个简单的 .bat 文件,它将 ping 另一台服务器,过滤掉除一行之外的所有行,然后写入文件以供以后使用(然后我想将该文件发送到某个地方,但这是另一个讨论的项目!)。
我从论坛中搜索了一些命令,并找到了实现此操作所需的命令。当我从 ms-dos 一次运行这些命令时,它可以正常工作。但是,当将它们全部粘贴到 bat 文件中时,就会出现问题。我对服务器操作系统没有太多经验,所以可能是我遗漏了一些简单的东西。任何帮助都将不胜感激。
以下是我的指示
ping 10.18.89.154 >C:\pinglog.txt
FOR /F "skip=8 delims=" %i in (C:\pinglog.txt) do @echo %i >C:\TEMP.TXT
SET /P SHOW= < C:\TEMP.TXT
ECHO %SHOW% >C:\pinglog.txt
手动运行的结果如下:
数据包:已发送 = 4,已接收 = 4,丢失 = 0(0% 丢失),
但是当我在批处理文件中运行这些命令时,cmd 窗口挂在第一行,在 cmd 窗口中显示以下文本并生成一个空白文件...
C:\Users\administrator.WSI\Documents>ping 10.18.89.154 1>C:\pinglog.txt
有什么想法吗?
答案1
无法在 Server 2012 中运行批处理文件
这是一个更简单的方法来做你想做的事情(用一行命令):
ping 10.18.89.154 | findstr "Packets" > c:\pinglog.txt
上述命令将按照命令行或批处理文件的方式运行。
以下批处理文件使用 google.com 作为 ping 目标,因为我无法使用私有 IP 地址 ping 您的网络上的某些东西。
测试.cmd:
ping www.google.com | findstr "Packets" > pinglog.txt
示例输出:
C:\test>test
C:\test>ping www.google.com | findstr "Packets" 1>pinglog.txt
C:\test>type pinglog.txt
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
C:\test>
要使用原始命令,for /f
您需要在命令中将其替换%
为%%
:
FOR /F "skip=8 delims=" %%i in (C:\pinglog.txt) do @echo %%i >C:\TEMP.TXT
有没有办法隔离该行中的值,或者只能生成整行?
我只想恢复“已接收”值的原因是,如果该文件为“0”,我就可以基于此触发警报。
以下批处理文件将查找“Received”的值,如果该值为,则输出“Ping failed” 0
,否则不输出任何内容。
作为奖励,它不使用任何文件。
echo "Ping failed"
当您决定这应该是什么时,您可以用您的警报命令来替换。
测试.cmd:
@echo off
for /f "usebackq skip=8 tokens=7" %%i in (`ping 10.18.89.154`) do (
set _result=%%i
goto :done
)
:done
if "%_result:~0,1%"=="0" echo "Ping failed"
进一步阅读
%%parameter
可替换参数:在批处理文件中使用%%G
(在命令行上%G
)
答案2
我遇到了与原始问题中描述的相同的问题。我找不到答案。我最终通过创建批处理文件的快捷方式解决了该问题。从快捷方式启动批处理文件时,文件会按预期执行。否则,它会挂在第一行。