Windows批处理脚本,用于ping计算机列表并在联机PC上运行脚本

Windows批处理脚本,用于ping计算机列表并在联机PC上运行脚本,windows,batch-file,Windows,Batch File,我正在尝试编写一个批处理文件,该文件将在100多台电脑的列表中搜索一个文件,并输出三件事情中的一件:电脑是否有该文件、电脑是否没有或电脑是否处于唤醒状态。最后一部分是我不明白的部分。我希望脚本创建3个单独的csv文件-HAS_FILE,NEEDS_FILE和NOT_那里。我可以成功运行此代码(假设“ComputerList”中的所有PC都已“启动”): 在我写了那个脚本之后,我意识到假设我的网络上有100多台计算机在运行是愚蠢的。如果上面的脚本击中脱机的PC,它将错误地报告它需要该文件。实际上,

我正在尝试编写一个批处理文件,该文件将在100多台电脑的列表中搜索一个文件,并输出三件事情中的一件:电脑是否有该文件、电脑是否没有或电脑是否处于唤醒状态。最后一部分是我不明白的部分。我希望脚本创建3个单独的csv文件-HAS_FILE,NEEDS_FILE和NOT_那里。我可以成功运行此代码(假设“ComputerList”中的所有PC都已“启动”):

在我写了那个脚本之后,我意识到假设我的网络上有100多台计算机在运行是愚蠢的。如果上面的脚本击中脱机的PC,它将错误地报告它需要该文件。实际上,我希望它报告它“不在那里”。我认为最好的方法是在批处理的开始处添加一个ping,这就是我所拥有的,但它不起作用:

for /f "tokens=*" %%i in (C:\ComputerList.csv) do (
ping %%i -n 1 -w 100
IF "%errorlevel%" EQU "1" (
echo %%i >> \\networkdrive\NOT_THERE.csv
) ELSE IF EXIST "\\%%i\c$\Program Files\F5 Networks\iControlSnapIn\f5.ico". (
echo %%i >> \\networkdrive\HAS_FILE.csv
) ELSE (
echo %%i >> \\networkdrive\NEEDS_FILE.csv
)
)
我已经玩了很多次了,但是不能让它正常工作。任何帮助都将不胜感激。 谢谢大家!

编辑:我应该告诉你我的结果-为了测试,我把我的csv缩小到4台电脑-1台有文件,1台没有,2台离线。脚本挂起大约一半(在ping第一台脱机PC后)约10秒。当它完成时,我只得到我应该得到的3个输出文件中的2个。它会成功报告包含该文件的PC,但会将其他3个文件分组到“需要”文件日志中。它不会在NOT_THERE csv中报告2台脱机计算机。有人知道我做错了什么吗?再次感谢


EDIT2:我可能已经找到了脚本不报告脱机PC的原因。出于某种原因,脚本似乎正在捕获列表中第一台PC的第一个“错误级别”。第一台电脑已启动,因此它将“0”错误级别传递给其他3台电脑。我将列表中的第一台电脑更改为关闭的电脑,它将“1”错误级别传递给其余3台电脑。我怎样才能解决这个问题?谢谢大家!

在ping之前插入此行。csv文件中可能有额外的字符

echo.i=%%i]

IF %errorlevel% EQU "1" (
这是行不通的。 我想,你的意思是:

IF "%errorlevel%" EQU "1" (

我找到了解决办法!这是错误级别周围的“%”符号。以下是有效的代码:

for /f "tokens=*" %%i in (C:\ComputerList.csv) do (
ping %%i -n 1 -w 100
IF errorlevel 1 (
echo %%i >> \\networkdrive\NOT_THERE.csv
) ELSE IF EXIST "\\%%i\c$\Program Files\F5 Networks\iControlSnapIn\f5.ico". (
echo %%i >> \\networkdrive\HAS_FILE.csv
) ELSE (
echo %%i >> \\networkdrive\NEEDS_FILE.csv
)
)

文件中的计算机列表是否为每行一个ip/名称?它列出了一个.csv文件,通常是
a、b、c、d
格式,在您的代码中无法正常工作。是的,我每行使用一个主机名。我还使用了一个txt文件进行测试,得到了相同的结果:-/是的,这正是我的意思。很抱歉我错了。谢谢你的建议,但还是不行。我在测试中使用了一个txt文件,但它仍然不起作用。这并不是为了让它起作用。它旨在显示%%i是否是您所期望的,并查看是否有尾随字符等。
for /f "tokens=*" %%i in (C:\ComputerList.csv) do (
ping %%i -n 1 -w 100
IF errorlevel 1 (
echo %%i >> \\networkdrive\NOT_THERE.csv
) ELSE IF EXIST "\\%%i\c$\Program Files\F5 Networks\iControlSnapIn\f5.ico". (
echo %%i >> \\networkdrive\HAS_FILE.csv
) ELSE (
echo %%i >> \\networkdrive\NEEDS_FILE.csv
)
)