WinRAR 批处理文件,用于将每个文件夹中的第一个子目录压缩为 zip

WinRAR 批处理文件,用于将每个文件夹中的第一个子目录压缩为 zip

我正在努力寻找一个解决方案来扫描目录中的所有文件夹,并在所述文件夹中创建一个包含其中第一个/唯一子文件夹内容的 zip 文件。

这是一个示例文件夹/结构/层次结构

I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]\PCSE00398

我想将里面的内容PCSE00398压缩成一个 zip 文件(同名)并留在I:\Unsorted\Sony - PlayStation Vita\NoNpDrm Physical\SENRAN KAGURA SV [PCSE00398] [NTSC]文件夹中。

答案1

@echo off 

set "_flag=a -ep1 -m5 -cfg- -y -o+"
cd /d "%~dp0" && for /d /r "I:\test\." %%i in (*
)do 2>nul tree.com /a "%%~dpnxi"|findstr /bl \\--- >nul || (
"%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar" )

要到达子文件夹的最后一级,只需要检查每个子文件夹中是否有另一个文件夹,否则,压缩这个最后一级文件夹。

您可以使用for /d /r循环,它将遍历所有文件夹,并在循环内的每个文件夹中,将命令tree与一起使用findstr,您可以检查当前文件夹是否有更多子文件夹。

您可以在所有子文件夹中递归使用tree "current_looping_folder" /afor /d /r,并通过检查每个输出findstr“字符串”"\---")重定向至运营商||并采取行动(Rar) 如果未找到\---命令tree输出中的此字符串\---Last Folder

Folder PATH listing
Volume serial number is A0AD-DC56
F:\SUPER_USER\Q1599429
\---Last Folder

上面的输出来自我所在的文件夹,F:\SUPERUSER\Q1599429这里有Last Folder子文件夹,但如果我在F:\SUPER_USER\Q1599429\Last Folder子文件夹中,我会得到以下输出:

Folder PATH listing
Volume serial number is A0AD-DC56
F:\SUPER_USER\Q1599429\Last Folder
No subfolders exist

如果findstr找不到字符串"\---",则当前文件夹中没有子文件夹,这是最后一个文件夹:

F:\SUPER_USER\Q1599429\Last Folder

这种情况下,如果没有子文件夹的话,command命令就不会成功,那么就让操作员在你实际文件夹级别的最后一个文件夹中精确地执行命令......tree "Actual_Loop_Folder" /a | findstr "\---"||Rar.exe

  • 观察:1\需要额外的字符\来转义findstr
 ... tree.com /a "%%~dpnxi"|findstr /bl \\--- ... 
  • 观察:2这将尝试说明||操作员如何机械地工作:
                         command1 || command2
                 execute command1 || only execute command2 (if) command1 fails
          if tree folder /a fails || there is no subfolder in it
      there is no subfolder in it || this is the the last subfolder
       this is the last subfolder || run rar flags in the \Last Folder
tree /a "%~fi"|findstr "\---">nul || Rar "I:\Unsorted\...\PCSE00398"
  • 观察:3如果你需要运行WinRar.exe相反Rar.exe,只需删除/替换/编辑:
"%ProgramFiles%\WinRAR\Rar.exe" %_flag% "%%~i" "%%~dpni" |find/i ".rar"

"%ProgramFiles%\WinRAR\WinRar.exe" %_flag% "%%~i" "%%~dpni" 
  • 观察:4您可以编辑以使用您的自定义标志/开关Rar/WinRar命令:
<Commands>
        a    ==  Add files to archive 

<Switches>

      cfg-   ==  Disable read configuration 
      ep1    ==  Exclude base directory from names 
  m<0..5>    ==  Set compression level (0-store...3-default...5-maximal) 
   o[+|-]    ==  Set the overwrite mode 
        y    ==  Assume Yes on all queries 
-----------------------------------------------------------------------
set "_flag=a -ep1 -m5 -cfg- -y -o+"

  • 进一步阅读:

[√]For 循环

[√]For/D 循环

[√]For/R 循环

[√]WinRar.exe | Rar.exe /?

[√]CMD/蝙蝠操作员 /dostips.com

[√]条件执行 || && ...

相关内容