我想创建一个包含我要压缩的文件夹的档案。我的挑战是,我想从目录的根目录中排除一些文件,但不从其子目录中排除。
假设我有这样的结构:
Dir1
SubDir1
composer.json
composer.json
我的目标是拥有这样的档案:
Dir1
SubDir1
composer.json
我想排除 Dir1 中的 composer.json,但不排除 SubDir1 中的 composer.json。我还想保留存档中的文件夹“Dir1”。
为了保留“Dir1”,我这样做了:
del %dirname%.zip
FOR /F %%i IN ('cd') DO set dirname=%%~nxi
cd ..
7z a -tzip %dirname%/%dirname%.zip %dirname% -mx0 -x!composer.json
cd %dirname%
不幸的是,这不会跳过 composer.json,因为从我的脚本的角度来看它位于子目录中。当我使用-xr
它时,它也会跳过 composer.json SubDir1
。
当我从 Dir1 内部运行此脚本时,我会得到我想要的效果,但是 Dir1 不会包含在我的档案中:
del %dirname%.zip
FOR /F %%i IN ('cd') DO set dirname=%%~nxi
7z a -tzip %dirname%.zip * -mx5 -x!composer.json
我看到这里有两个可能的解决方案,我需要帮助:
我怎样才能仅排除文件
Dir1
而不排除其子目录?还有其他方法可以让我将该目录包含在我的档案中吗?
答案1
作为一名非专业的 zip 使用者或专业的批处理人员,我会:
- 在脚本顶部添加一行,将你不想包含的文件移动到更高的目录中
- 然后最后将其移回其初始位置。但这种方式只有在只有一个文件需要排除且始终相同的情况下才有效。如果你不知道该做什么。
del %dirname%.zip
#### Moving the file a directory higher
mv %dirname%\composer.json ..
FOR /F %%i IN ('cd') DO set dirname=%%~nxi
cd ..
7z a -tzip %dirname%/%dirname%.zip %dirname% -mx0 -x!composer.json
#### Moving it back
mv composer.json %dirname%
cd %dirname%
我会听这个帖子,因为更好的答案可能会让我感兴趣!如果我找到更好、更 7zip 的方法来做到这一点,我会更新我的答案。
你的,
斯波基