我有一个脚本可以删除我的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
)
答案 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
)
)