0
@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 文件中的下一个计算机?

4

2 回答 2

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
于 2013-02-13T01:28:43.500 回答
0

实际上,windows ping.exe 不会返回有意义的错误级别,(嗯?)
它总是返回“0”错误级别,除非 IP 协议堆栈本身被冲洗掉。

你需要做的是:将你的 ping 输出通过管道传输到一个 txt 文件,然后“查找”TTL=

平 10.10.10.10。>pingtest.txt
findstr /C:"TTL=" pingtest.txt >nul
if %ERRORLEVEL% equ 0 (dowhatever) else (echo skipping unreachable host "whatever")

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

我希望这有帮助 !

于 2014-12-02T08:00:23.507 回答