批量压缩子目录并以父文件夹命名压缩包的命令需求
批量压缩子目录并以父文件夹命名压缩包的命令需求
我来帮你搞定这个批量压缩的问题!你现在的需求很明确:每个形如ABC-2000-001-01.pax的文件夹里,都有FolderA和FolderB,要把这两个子文件夹直接打包成和父文件夹同名的压缩包(比如ABC-2000-001-01.pax.zip),而且要保留原有的目录结构——既不能把文件夹扁平化,也不能在压缩包里多套一层父文件夹。
之前你用的批处理之所以会多一层目录,是因为它直接把整个父文件夹作为压缩对象,导致压缩包里先出现ABC-2000-001-01.pax这个文件夹,里面才是FolderA和FolderB。咱们换个思路,进入到每个父文件夹内部去压缩,就能完美解决这个问题。
给你调整后的批处理脚本:
@echo off setlocal enabledelayedexpansion :: 遍历当前目录下所有以.pax结尾的文件夹 for /d %%i in (*.pax) do ( echo 正在压缩 %%i... :: 进入目标文件夹 pushd "%%i" :: 将当前文件夹内的所有内容(FolderA、FolderB)压缩到上级目录的同名zip包 7z a "../%%i.zip" * :: 返回原来的目录 popd )
脚本说明:
pushd "%%i":临时进入到每个.pax文件夹里,这样压缩时的根目录就是这个文件夹内部,不会带上外层的父文件夹名称。7z a "../%%i.zip" *:把当前文件夹里的所有内容(也就是FolderA和FolderB)添加到上级目录的%%i.zip文件中,这样压缩包打开后直接就能看到这两个文件夹,完全符合你的结构要求。- 如果需要生成
.7z格式的压缩包,只需要把../%%i.zip改成../%%i.7z就行。 - 要是你想压缩当前目录下的所有文件夹(不只是
.pax结尾的),把(*.pax)改成(*)即可。
这个脚本既不会扁平化你的目录结构,也不会多生成多余的层级,完全匹配你的需求~
备注:内容来源于stack exchange,提问作者NoorSafi
相关产品推荐
相关产品推荐

