Ping 命令本身有效,但不在命令文件中
Ping command works by itself but not in command file
这行代码是我以前在网上找到的,我已经用了很多。它通过名称或地址对给定的服务器执行 ping 操作,并在输出中添加日期和时间戳,并将其发送到文本文件。
如果我将它复制并粘贴到命令行中,它可以完美运行,但在命令文件 (.cmd) 中它不起作用。
我知道我自己唯一要做的就是给变量加上双“%%”符号,我也这么做了。
这是我的代码:
CLS
@echo off
setlocal EnableDelayedExpansion
:start
set /p server=Enter the server name you wish to run a continuous ping of:
echo %server%
if exist \%server%\c$ goto ping
echo THIS SERVER IS OFFLINE OR DOES NOT EXIST
echo VERIFY NAME ENTERED AND TRY AGAIN
pause
goto start
:ping
echo %server%
ping -t %server%|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 %server%>nul" >C:\%server%_ping.txt
:end
您必须在批处理文件中禁用延迟变量扩展,因为 pipe 的子外壳正在使用延迟扩展,这是由 cmd /v
指示的。
在批处理中启用延迟扩展会导致在子 shell 开始执行之前解析延迟变量。
您需要将 setlocal EnableDelayedExpansion
更改为 setlocal DisableDelayedExpansion
目前你的批处理文件本身不需要延迟变量扩展,但如果需要,那么它应该在执行管道命令之前禁用延迟扩展。
这行代码是我以前在网上找到的,我已经用了很多。它通过名称或地址对给定的服务器执行 ping 操作,并在输出中添加日期和时间戳,并将其发送到文本文件。
如果我将它复制并粘贴到命令行中,它可以完美运行,但在命令文件 (.cmd) 中它不起作用。
我知道我自己唯一要做的就是给变量加上双“%%”符号,我也这么做了。
这是我的代码:
CLS
@echo off
setlocal EnableDelayedExpansion
:start
set /p server=Enter the server name you wish to run a continuous ping of:
echo %server%
if exist \%server%\c$ goto ping
echo THIS SERVER IS OFFLINE OR DOES NOT EXIST
echo VERIFY NAME ENTERED AND TRY AGAIN
pause
goto start
:ping
echo %server%
ping -t %server%|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!date! !time! !data!)&ping -n 2 %server%>nul" >C:\%server%_ping.txt
:end
您必须在批处理文件中禁用延迟变量扩展,因为 pipe 的子外壳正在使用延迟扩展,这是由 cmd /v
指示的。
在批处理中启用延迟扩展会导致在子 shell 开始执行之前解析延迟变量。
您需要将 setlocal EnableDelayedExpansion
更改为 setlocal DisableDelayedExpansion
目前你的批处理文件本身不需要延迟变量扩展,但如果需要,那么它应该在执行管道命令之前禁用延迟扩展。