batch-file - Ping 命令单独工作,但不在命令文件中
问题描述
这行代码是我之前在网上找到的,我已经用过很多次了。它按名称或地址 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
解决方案
您必须在批处理文件中禁用延迟变量扩展,因为管道的子外壳正在使用cmd /v
.
在批处理中启用延迟扩展会导致延迟变量在子 shell 开始执行之前得到解决。
您需要更改setlocal EnableDelayedExpansion
为setlocal DisableDelayedExpansion
目前您的批处理文件本身不需要延迟变量扩展,但如果需要,它应该在执行管道命令之前禁用延迟扩展。
推荐阅读
- android - React Native 应用程序中的通知声音设置对话框,例如 WhatsApp
- c# - Visual Studio 2019 中的“项目位置”设置存储在哪里?
- python - 无法从 python 计算器获得正确的输出
- automation - ansible 角色的常见用例
- python-3.x - 这个循环不会执行它之后的代码
- c++ - 在 c++ 中,将取消引用的后自增指针分配给另一个已取消引用的后自增指针的结果是什么?
- excel - “1004”:该排序引用无效。确保它在您要排序的数据内,并且第一个排序依据框不是相同的或空白的
- node.js - 保持获取最新数据
- arrays - 在视图控制器上放置无限的 uiview 对象数组
- android - Android以编程方式将域和IP添加到主机文件