我使用这个脚本来提取.rar
文件
@echo off
set "SourceFolder=C:\temp"
set "TargetFolder=C:\temp2"
if not exist "%TargetFolder%" md "%TargetFolder%"
"C:\Program Files\WinRAR\Rar.exe" x -ad -cfg- -idq -r -y "%SourceFolder%\*.rar" "%TargetFolder%"
del /F /Q /S "%SourceFolder%\*.rar">nul
for /D %%D in ("%SourceFolder%\*") do rd "%%D" 2>nul
但是它会删除.rar
档案,SourceFolder
有没有办法阻止这种删除操作?
答案1
@echo off
set "SourceFolder=C:\temp"
set "TargetFolder=C:\temp2"
if not exist "%TargetFolder%" md "%TargetFolder%"
"C:\Program Files\WinRAR\Rar.exe" x -ad -cfg- -idq -r -y "%SourceFolder%\*.rar" "%TargetFolder%"
for /D %%D in ("%SourceFolder%\*") do rd "%%D" 2>nul
- 解决办法是删除第6行:
del /F /Q /S "%SourceFolder%\*.rar">nul
del /F /Q /S "%SourceFolder%\*.rar">nul
答案2
@echo off
if not exist "%TargetFolder%" md "%TargetFolder%"
"C:\Program Files\WinRAR\Rar.exe" x -ad -cfg- -idq -r -y "%SourceFolder%\*.rar" "%TargetFolder%"
提取文件时防止从 SourceFolder 中删除档案
如果需要防止文件被删除,删除最后2行;
此行删除全部文件递归并省略输出>nul
:
del /F /Q /S "%SourceFolder%\*.rar" >nul
del /F /Q /S "%SourceFolder%\*.rar" >nul
此行删除文件夹也省略输出中的任何错误经过2>nul
:
for /D %%D in ("%SourceFolder%\*") do rd "%%D" 2>nul
for /D %%D in ("%SourceFolder%\*") do rd "%%D" 2>nul
您不需要if exist "%TargetFolder%"
,使用2>nul md "%TargetFolder%"
,如果文件夹存在,则屏幕上不会出现错误/警告,如果文件夹不存在,则会创建。
2>nul md "C:\temp2\."
观察:1由于您的SourceFolder
和TargetFolder
文件夹的路径显然很短,您可以选择使用它们,而不是创建长度大于路径本身的变量,从而使其更简单且更易于阅读。
@echo off
2>nul md "C:\temp2\."
"C:\Program Files\WinRAR\Rar.exe" x -ad -cfg- -idq -r -y "C:\temp\*.rar" "C:\temp2"
观察:2最后一行没有做任何事情,它是一个循环,遍历文件夹以删除它们,如果不添加/S
命令rd "%%D"
,则不会删除包含文件的文件夹,而在原始代码中,上一行的命令在之前递归删除了那些文件For /D
,现在它没有任何意义,除了The directory is not empty.
被省略的错误消息2>nul
。
其他资源:
-
|
,<
,>
,2>
, ETC。