首页 > 解决方案 > 在批处理文件中使用 7zip“排除通配符”

问题描述

我有一个用于项目备份的批处理文件,我想修改它以排除不必要的文件。

我当前的文件使用简单的 7z 命令将整个文件夹打包到一个存档中:

!7zipPath! a -t7z "archive_name" "path_to_add".

从我在其他人的问题中发现,要排除给定的文件,我可以使用标志,例如-x!.txt-xr! .txt如果路径包含子文件夹。

!7zipPath! a -t7z "archive_name" "path_to_add" -xr!*.jt

这应该排除所有具有 .jt 扩展名(软件特定扩展名)的文件,但是 -x!*.jt 返回“不正确的通配符 typemaker *.jt 所以据我了解,7zip 不知道这个扩展名,所以我不能使用它(是正确的想法?)

因此,我尝试仅使用包含。其他问题的答案说它应该像这样简单地添加:

!7zipPath! a -t7z "archive_name" "path_to_add" ./*.xml

据我了解,这应该创建仅包含 .xml 文件的存档,同时保持结构,但它只是忽略该通配符并从路径中放置所有文件。它不返回任何类型的错误。

如何在批处理文件 7z 命令中使用 7zip 命令选项来获得预期结果?

附言; 它可以与文件夹上的扩展一起使用吗?例如,它会包括整个 folder.cojt 吗?

编辑:完整代码

@echo off
setlocal EnableDelayedExpansion
SETLOCAL ENABLEEXTENSIONS
rem Get the time from WMI - at least that's a format we can work with
set X=
for /f "skip=1 delims=" %%x in ('wmic os get localdatetime') do if not defined X set X=%%x
rem dissect into parts
set DATE.YEAR=%X:~0,4%
set DATE.MONTH=%X:~4,2%
set DATE.DAY=%X:~6,2%

echo Today is: %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY%

if not exist %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY% (
echo Making Backup

For /F "Delims=" %%A In ('where /r "C:\Program Files\7-Zip" /f 7z.exe') do Set zipPath=%%A
IF NOT DEFINED zipPath (
echo Extending search range for 7zip...
For /F "Delims=" %%A In ('where /r C:\ /f 7z.exe') do Set zipPath=%%A
)
IF NOT DEFINED zipPath (
echo Extending search range for 7zip...
For /F "Delims=" %%A In ('where /r D:\ /f 7z.exe') do Set zipPath=%%A
)
IF NOT DEFINED zipPath (
echo 7zip not found on this PC
echo You can close this window now
cmd /k
)

md %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY%
cd %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY%

!zipPath! a -t7z "%DATE.YEAR%-%DATE.MONTH%-%DATE.DAY%_TuneCells" "M:\01\TuneCells\" 
)
if exist %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY% (
echo Backup already created %DATE.YEAR%-%DATE.MONTH%-%DATE.DAY%
)

PAUSE

正如其中一项推荐中提到的,搜索 7z 是为了让多人可以轻松地使用代码,而不管他们的安装路径偏好如何(令人惊讶的广泛)

标签: batch-file7zipfile-extension

解决方案


推荐阅读