2016-09-20 40 views
0

我有一個腳本來刪除我的愛普生掃描文件夾中的所有文件。在我的pclist.txt中,每行都列出了每個pc名稱。我試圖找出如何調整這個腳本,以繼續下面的電腦,如果列表中的電腦沒有打開。如果所有個人電腦都打開,腳本運行良好。但是,如果關閉一臺電腦,它將停止運行,並且不會移動到列表中的下一臺電腦。有誰知道我可以如何調整?「刪除文件腳本」繼續下一臺電腦,如果一個電腦列表關閉問題

注:pclist.txt僅僅是一個PC名稱

@echo off 
IF "%CD%\" NEQ "%~dp0" PUSHD "%~dp0" 

for /F %%G in (pclist.txt) do ( 

pushd "\\%%G\C$\Epson Scans" || exit /B 1 
for /D %%I in ("*") do (
    rd /S /Q "%%~I" 
) 
del /Q "*" 
popd 

) 

回答

1

有一個exit /B命令的列表,所以這是毫不奇怪的是,腳本情況下pushd失敗終止。 ||構成了一個條件命令級聯運算符,它允許下面的命令只在前一個失敗的情況下執行(即它返回一個非零的退出代碼)。

所以我會刪除|| exit /B 1部分,並簡單地反轉邏輯,以便只有在pushd成功連接到驅動器時​​才能完成刪除操作。還有一個&&操作者,讓下面的命令的情況下,前一成功,這是我將使用執行:

@echo off 
for /F "usebackq delims=" %%G in ("%~dp0pclist.txt") do ( 
    pushd "\\%%G\C$\Epson Scans" && (
     rem Perform the actual deletions in case of successful connection: 
     for /D %%I in ("*") do (
      rd /S /Q "%%~I" 
     ) 
     del /Q "*" 
     popd 
    ) || (
     rem Do something in case of failure, like printing an error message: 
     >&2 echo Could not connect "%%G"! 
    ) 
) 
1

嘗試使用ping命令(-n 1嘗試僅1次)和測試使用ERRORLEVEL可變

ping -n 1 MYSERVER > nul 
if NOT ERRORLEVEL 1 (
    echo "MYSERVER IS OK" 
) 

在你的腳本:

@echo off 
IF "%CD%\" NEQ "%~dp0" PUSHD "%~dp0" 

for /F %%G in (pclist.txt) do ( 

    ping -n 1 %%G > nul 
    if NOT ERRORLEVEL 1 (

    pushd "\\%%G\C$\Epson Scans" || exit /B 1 
    for /D %%I in ("*") do (
     rd /S /Q "%%~I" 
    ) 
    del /Q "*" 
    popd 

    ) 
) 
相關問題