我正在努力寻找一个解决方案来扫描目录中的所有文件夹,并在所述文件夹中创建一个包含其中第一个/唯一子文件夹内容的 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
,您可以检查当前文件夹是否有更多子文件夹。
FOR /R - Loop through files (recursively) FOR /D - Loop through several folders/directories
The option /D /R is undocumented, but can be a useful combination, while it will recurse through all subfolders the wildcard will only match against Folder/Directory names (not filenames) Note: Source linked to ss64.com
您可以在所有子文件夹中递归使用tree "current_looping_folder" /a
for /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 循环