我正在尝试编写一个批处理文件,该文件将在 100 多台 PC 的列表中搜索文件并输出 3 件事中的 1 件:如果 PC 有该文件,如果没有,或者它没有唤醒。最后一部分是我想不通的部分。我希望脚本创建 3 个单独的 csv 文件 - HAS_FILE、NEEDS_FILE 和 NOT_THERE。我可以成功运行此代码(假设“ComputerList”中的所有 PC 都“启动”):
for /f "tokens=*" %%i in (C:\ComputerList.csv) do (
IF EXIST "\\%%i\c$\Program Files\F5 Networks\iControlSnapIn\f5.ico". (
echo %%i >> \\networkdrive\HAS_FILE.csv
) ELSE (
echo %%i >> \\networkdrive\NEEDS_FILE.csv
)
)
在我写完那个脚本之后,我意识到假设我的网络上有 100 多台计算机会启动是愚蠢的。如果上面的脚本遇到离线的 PC,它会错误地报告它需要该文件。实际上,我希望它报告它是“NOT_THERE”。我认为最好的方法是在批处理的开头添加一个 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 台 PC——1 台有文件,1 台没有文件,2 台离线。该脚本挂起大约一半(在它 ping 第一台离线 PC 之后)大约 10 秒。完成后,我只得到了我应该得到的 3 个输出文件中的 2 个。它成功报告了包含该文件的 PC,但在 NEEDS_FILE 日志中将其他 3 个分组。它不会报告 NOT_THERE csv 中的 2 台离线计算机。有谁知道我做错了什么?再次感谢!
EDIT2:我可能找到了我的脚本没有报告离线 PC 的原因。出于某种原因,该脚本似乎正在捕获列表中第一台 PC 的第一个“错误级别”。第一台 PC 已启动,因此它将“0”错误级别传递给其他 3 台 PC。我将列表中的第一台 PC 更改为已关闭的 PC,并将“1”错误级别传递给剩余的 3 台。我该如何解决这个问题?谢谢!