2016-09-20 44 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 

    ) 
) 
相关问题