Batch file Ping命令本身工作,但不在命令文件中
这一行代码是我以前在网上找到的,我已经使用了很多。它按名称或地址ping给定的服务器,并向输出中添加日期和时间戳,输出将发送到文本文件 如果我将其复制并粘贴到命令行中,它将完美地工作,但在命令文件(.cmd)中它不工作 我知道自己要做的唯一一件事就是给变量双“%%”符号,我做到了 这是我的密码:Batch file Ping命令本身工作,但不在命令文件中,batch-file,for-loop,ping,Batch File,For Loop,Ping,这一行代码是我以前在网上找到的,我已经使用了很多。它按名称或地址ping给定的服务器,并向输出中添加日期和时间戳,输出将发送到文本文件 如果我将其复制并粘贴到命令行中,它将完美地工作,但在命令文件(.cmd)中它不工作 我知道自己要做的唯一一件事就是给变量双“%%”符号,我做到了 这是我的密码: CLS @echo off setlocal EnableDelayedExpansion :start set /p server=Enter the server name you
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
您必须在批处理文件中禁用延迟变量扩展,因为管道的子shell正在使用延迟扩展,这是由
cmd/v
指示的
在批处理中启用延迟扩展会导致在子shell开始执行之前解析延迟变量
您需要将setlocal EnableDelayedExpansion
更改为setlocal DisableDelayedExpansion
当前,批处理文件本身不需要延迟变量扩展,但如果需要,则应在执行pipe命令之前禁用延迟扩展。忽略“echo%server%”内容,我添加它只是为了跟踪我在代码中的位置。它是无用的,并且与问题无关。此外,我确实得到了文本文件的输出,但它只是日期和时间戳。我没有在文本输出中显示ping结果。不确定,但我猜
pause
命令可能会“吞下”生成的ping
文本…感谢您的建议。我删除了它,但是没有什么不同。无限for/L
循环是为了什么?谢谢!这很有道理。谢谢你让我看到了这一点。应该更加注意CMD的开关。现在可以了。把这个解决了。备选:逃出每个(引用)<代码>!<代码>由^代码>,因此可以在宿主批处理文件中启用延迟扩展。。。