在批处理文件的“for”循环中使用“ping”和“findstr”首先会引发错误,不是内部外部命令,但它再次显示输出

Sri*_*san 6 batch ping batch-file findstr

这个批处理文件

@echo off
set path=C:\Users\ssiyengar\Desktop\Pingtest\pinglist.csv
set file=C:\Users\ssiyengar\Desktop\Pingtest\temp.txt
set qosping=1
cls
for /f "tokens=1-3 delims=," %%a IN (%path%) do (
    ping %%c -n %qosping% > %file%
    findstr "time< time=" %file% >nul
    if %errorlevel%==1 (
    echo %%a  %%b IP %%c Ping FAILURE
    ) else (
    echo %%a  %%b IP %%c Ping SUCCESS
    )
)
pause
Run Code Online (Sandbox Code Playgroud)

输出:

'ping' is not recognized as an internal or external command,
operable program or batch file.

'findstr' is not recognized as an internal or external command,
operable program or batch file.

SYS1  MC1 IP XX.XX.XX.XX Ping SUCCESS
Run Code Online (Sandbox Code Playgroud)

CSV 文件是:

SYS1,MC1,IP1 \
SYS2,MC2,IP2
Run Code Online (Sandbox Code Playgroud)

为什么 ping/ findstr无法识别?
如果我直接传递值而不是从 CSV 文件传递​​值,则效果很好。为什么?我该如何解决?
注意:环境变量已经包含Sys32.

LPC*_*hip 14

问题是你设置了路径。Path 是一个特殊的环境变量,旨在保存具有程序(例如 ping 和 findstr)的位置的路径。

通过输入 set path=... 您可以使用一个文件覆盖此列表,从而清除这次运行的路径。幸运的是,使用 set 只会在脚本运行时更改变量,而不是在所有会话中更改变量。这就是为什么转到 cmd 并使用 csv 中的值输入 ping 仍然有效。

如果您在同一 cmd 会话中键入 set path= 行,则在关闭并重新打开 cmd 之前,手动键入带有值的 ping 将不再起作用。

如果您更改:set path=set mypath=到您的%path%脚本%mypath%将会起作用。