2013-02-13 16 views
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文件中的下一个计算机?

+0

如果你不关心通过'psexec'执行的命令的输出,那么'wmic/node:%% a/user:user/password:password process call create“ cmd/c \“d:\\ path \\ command.exe \”“'会比'psexec'快。 – rojo 2013-02-13 01:49:56

回答

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 
+0

谢谢!我会测试它,看看它是如何工作的。 :) – 2013-02-13 21:12:52

+0

这是一个辉煌的答案!谢谢! – 2013-10-18 20:24:45

0

其实,窗户ping.exe的不返回有意义errorlevels,(啊?)
始终返回“0”错误级别,除非IP协议栈本身是大清洗。

你有什么做的是:管你平到一个txt文件的输出,而“发现”为TTL =

平10.10.10.10。 > pingtest.txt
FINDSTR/C: “TTL =” pingtest.txt> NUL
如果%ERRORLEVEL%当量0(作事)否则(回声跳过无法访问的主机 “无所谓”)

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

我希望这有助于!

相关问题