我们有一个删除files(del)和目录(rd)的批处理脚本.如果这些删除语句中的任何一个失败,有没有人知道如何暂停(失败)脚本的执行?如果文件/目录被Windows锁定,它们可能会失败.谢谢.
更新
我正在使用的陈述:
德尔: del *.* /S /Q
RD: FOR /D %%G in (*) DO RD /s /q %%G
Pat*_*uff 13
要删除文件,您可以先尝试ren(重命名)该文件.
ren如果文件被锁定,将ERRORLEVEL设置为1.在文件名周围添加引号.
@echo OFF
:: Delete all files, but exit if a file is locked.
for %%F in (*.*) do (
@echo Deleting %%F
ren "%%F" tmp 2> nul
if ERRORLEVEL 1 (
@echo Cannot delete %%F, it is locked.
exit /b 1
)
del tmp
)
Run Code Online (Sandbox Code Playgroud)
我怀疑你可能能为目录做同样的事情,但我似乎无法弄清楚如何锁定目录以便我可以测试.以下可能有效:
:: Remove all directories, but exit if one is locked.
FOR /D %%G in (*) DO (
@echo Removing %%G
ren "%%G" tmpdir 2> nul
if ERRORLEVEL 1 (
@echo Cannot remove %%G, it is locked
exit /b 1
)
RD /s /q tmpdir
)
Run Code Online (Sandbox Code Playgroud)
如果文件被锁定,DEL不会返回错误级别.我刚用excel文件做了一个测试,我看到了零(在Windows XP上).
在执行删除操作后,使用IF EXIST删除文件可能会更好.
del file.txt
if exist file.txt ECHO "FAIL"
Run Code Online (Sandbox Code Playgroud)
编辑后 免责声明:我不知道这是如何表现的......
您可以为文件执行此操作
DIR /B /S /A-d > c:\filestodelete.txt
del *.* /S /Q
FOR /F %%i in (c:\filestodelete.txt) DO (
IF EXIST %%i ECHO %%i STILL EXISTS
)
Run Code Online (Sandbox Code Playgroud)
然后是目录
DIR /B /S /Ad > c:\directoriestodelete.txt
FOR /D %%G in (*) DO RD /s /q %%G
FOR /F %%i in (c:\directoriestodelete.txt) DO (
IF EXIST %%i ECHO %%i STILL EXISTS
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23439 次 |
| 最近记录: |