Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file Ping命令本身工作,但不在命令文件中_Batch File_For Loop_Ping - Fatal编程技术网

Batch file Ping命令本身工作,但不在命令文件中

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

这一行代码是我以前在网上找到的,我已经使用了很多。它按名称或地址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

您必须在批处理文件中禁用延迟变量扩展,因为管道的子shell正在使用延迟扩展,这是由
cmd/v
指示的

在批处理中启用延迟扩展会导致在子shell开始执行之前解析延迟变量

您需要将
setlocal EnableDelayedExpansion
更改为
setlocal DisableDelayedExpansion


当前,批处理文件本身不需要延迟变量扩展,但如果需要,则应在执行pipe命令之前禁用延迟扩展。

忽略“echo%server%”内容,我添加它只是为了跟踪我在代码中的位置。它是无用的,并且与问题无关。此外,我确实得到了文本文件的输出,但它只是日期和时间戳。我没有在文本输出中显示ping结果。不确定,但我猜
pause
命令可能会“吞下”生成的
ping
文本…感谢您的建议。我删除了它,但是没有什么不同。无限
for/L
循环是为了什么?谢谢!这很有道理。谢谢你让我看到了这一点。应该更加注意CMD的开关。现在可以了。把这个解决了。备选:逃出每个(引用)<代码>!<代码>由
^,因此可以在宿主批处理文件中启用延迟扩展。。。