我正在尝试编写一个批处理文件,该文件将在100多台PC的列表中搜索文件并输出3件事中的1件:如果PC有文件,如果没有,或者它没有醒来。最后一部分是我无法弄清楚的部分。我希望脚本创建3个单独的csv文件-HAS_FILE,NEEDS_FILE和NOT_THERE。我可以成功运行此代码(假设'ComputerList'中的所有PC都“up”):
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个离线。该脚本大约一半时间(在它点击第一台脱机PC之后)大约10秒钟。当它完成时,我只得到我应该得到的3个输出文件中的2个。它成功报告包含该文件的PC,但在NEEDS_FILE日志中将其他3分组。它不报告NOT_THERE csv中的2台脱机计算机。有谁知道我做错了什么?再次感谢!
EDIT2:我可能已经找到了我的脚本没有报告离线PC的原因。出于某种原因,该脚本似乎捕获了列表中第一台PC的第一个“错误级别”。第一台PC启动,因此它将“0”错误级别传递给其他3台PC。我将列表中的第一台PC更改为关闭的PC,并将“1”错误级别更改为剩余的3.如何解决此问题?谢谢!
答案 0 :(得分:1)
IF %errorlevel% EQU "1" (
永远不会奏效。 我想,你的意思是:
IF "%errorlevel%" EQU "1" (
答案 1 :(得分:0)
在ping之前插入此行。您可能在csv文件中有额外的字符
echo.i=%%i]
答案 2 :(得分:0)
我找到了解决方案!这是错误级别的“%”符号。以下是有效的代码:
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
)
)