提取文件时防止从 SourceFolder 中删除档案

提取文件时防止从 SourceFolder 中删除档案

我使用这个脚本来提取.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由于您的SourceFolderTargetFolder文件夹的路径显然很短,您可以选择使用它们,而不是创建长度大于路径本身的变量,从而使其更简单且更易于阅读。

@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

在此处输入图片描述


其他资源:

相关内容