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

时间:2015-04-15 09:27:11

标签: batch-file

当脚本运行时,当它发现一台机器无法访问时,我希望它跳过它。并仅为在线PC执行psexec命令

我创建了一个bat文件,如下所示,但它无法正常工作

 @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

2 个答案:

答案 0 :(得分:1)

wmic /node:"@computerlist.txt" /failfast:on process call create "c:\\windows\\notepad.exe"

它不会等待快速回答的电脑。记事本在远程计算机上不可见,但在本地计算机上不可见。

答案 1 :(得分:0)

您需要在代码中添加Setlocal EnableDelayedExpansion并访问错误级别!errorlevel!

@echo off
Setlocal EnableDelayedExpansion
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
)

问题是通常在解析时评估变量。因此,如果您使用%errorlevel%,它将始终包含第一个设定值。 EnableDelayedExpansion会在执行时强制进行评估,因此!errorlevel!将始终包含最后指定的值(而%errorlevel%仍将包含第一个值)。在您的情况下,变量可能会在循环的每次迭代时发生变化,因此您显然需要!errorlevel!

有关详细信息,请查看http://ss64.com/nt/delayedexpansion.html