如果关闭列表中的电脑问题,“删除文件脚本”继续到下一个电脑

时间:2016-09-20 19:44:07

标签: batch-file cmd

我有一个脚本可以删除我的Epson Scans文件夹中的所有文件。在我的pclist.txt中,每行都列出了每个pc名称。我试图找出如何调整此脚本以继续到下面的PC如果列表中的电脑没有打开。如果所有电脑都打开,脚本运行完美。但如果关闭电脑,它会停止运行,不会继续运行到列表中的下一台电脑。有谁知道我可以如何调整呢?

注意:pclist.txt只是个人电脑名称列表

@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

)

2 个答案:

答案 0 :(得分: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 :(得分:1)

尝试使用ping命令(只有-n 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

   )
)