如何跳过无法访问的批处理文件中的计算机?

时间:2013-02-13 01:01:52

标签: batch-file psexec

@echo off
:begin
for /f %%a in (computerlist.txt) do (
  setlocal
  psexec \\%%a -u user -p password -i -d "d:\path\command.exe"
  endlocal
)

当脚本运行时,当它发现一台机器无法访问时,我希望它跳过它。

如何编写脚本以跳过无法访问的计算机并继续使用txt文件中的下一个?

2 个答案:

答案 0 :(得分:0)

如何通过一个简单的测试来查看一台机器是否可以ping通?

@echo off
setlocal
:begin
for /f %%a in (computerlist.txt) do (
    ping -n 1 %%a >NUL 2>NUL
    if %errorlevel%==0 (
        psexec \\%%a -u user -p password -i -d "d:\path\command.exe"
    ) else echo Skipping unreachable host %%a
)
endlocal

答案 1 :(得分:0)

实际上,windows ping.exe没有返回有意义的错误级别,(呵呵?)
它总是返回一个" 0" errorlevel,除非IP协议栈本身被冲洗。

您需要做的是:将ping的输出传输到txt文件,并且"找到"对于TTL =

ping 10.10.10.10。 > pingtest.txt
findstr / C:" TTL =" pingtest.txt> nul
如果%ERRORLEVEL%等于0(做其他什么)其他(回跳跳过无法访问的主机"无论")

然后使用Find.exe或Findstr.exe在输出文件中查找TTL = (注意查找和发现都使用" 0"错误级别,当他们"找到"你搜索的内容)
1. Ping可能由于很多原因而失败,但是" TTL ="永远是成功的一部分 2.我总是至少ping -n 3次,因为偶尔会有一两个问题,我想在跳过它之前给它更多成功的机会。
3.为了使其工作,你必须使用上面的FOR循环方法,只是原始的psexec.exe没有当前的方法来测试/跳过从文本文件调用的目标。
4.如果您需要在psexec会话中使用网络资源,那么您需要运行" -h"选项,以便您获得提升的令牌,允许您映射驱动器

我希望有这个帮助!