我有一个脚本来删除我的爱普生扫描文件夹中的所有文件。在我的plist .txt中,我在每行上列出了每个pc的名称。我正试图弄清楚如何调整这个脚本继续到以下pc,如果列表上的pc不在上。如果所有电脑都打开,脚本运行完美。但是,如果一台pc被关闭,它将停止运行,并且不会移动到列表中的下一台pc。有人知道我该怎么调整吗?
注意:pclist.txt只是一个列表的pc名称
@echo off
IF "%CD%" NEQ "%~dp0" PUSHD "%~dp0"
for /F %%G in (pclist.txt) do (
pushd "\%%GC$Epson Scans" || exit /B 1
for /D %%I in ("*") do (
rd /S /Q "%%~I"
)
del /Q "*"
popd
)
有一个exit /B
命令,因此在pushd
失败时脚本终止也就不足为奇了。||
构成了一个条件命令连接操作符,它只允许在前一个命令失败的情况下执行下一个命令(也就是说,它返回一个非零的退出代码)。
因此,我将删除|| exit /B 1
部分并简单地反转逻辑,以便仅在pushd
成功连接到驱动器的情况下完成删除。还有一个&&
操作符,它允许在前一个命令成功的情况下执行以下命令,我将使用:
@echo off
for /F "usebackq delims=" %%G in ("%~dp0pclist.txt") do (
pushd "\%%GC$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"!
)
)
尝试使用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 "\%%GC$Epson Scans" || exit /B 1
for /D %%I in ("*") do (
rd /S /Q "%%~I"
)
del /Q "*"
popd
)
)