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

时间:2013-07-26 19:10:28

标签: windows batch-file

我正在尝试编写一个批处理文件,该文件将在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.如何解决此问题?谢谢!

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
)
)