2013-02-13 72 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」選項,這樣你得到提升的令牌,它允許你映射驅動器

我希望這有助於!

相關問題