-i(包含文件名)开关

-i(包含文件名)开关

我正在尝试创建一个批处理文件,以递归方式将多个子目录中的多个档案从源目录提取到输出目录,同时保持档案文件夹结构不变。下面的示例运行良好,只是我需要从每个档案中提取一种特定的文件类型(即 .txt、.doc、.pdf 等)。我需要进行哪些更改才能使其正常运行?

@ECHO ON

SET source=C:\Users\user\Desktop\test
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*"
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*"
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*"
PAUSE

我真诚地感谢您提前提供的帮助,并且我正在努力学习,因此,任何有关批处理脚本的详尽资源,只要能为我将来提供参考,我都会非常感激。

答案1

您可以使用-i7-Zip 的开关来实现这一点。例如,对批处理文件进行以下修改将仅提取.txt文件。

@ECHO ON

SET source=C:\Users\user\Desktop\test
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt
PAUSE

以下是更多信息文档

-i(包含文件名)开关

指定附加的包含文件名和通配符。

支持多个包含开关。

句法

-i[<recurse_type>]<file_ref>

<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}

参数

<recurse_type>

指定此开关中的通配符和文件名必须如何使用。如果未指定此选项,则将使用由 -r(递归)开关指定的全局值。有关更多详细信息,请参阅 -r(递归)开关的规范。

<recurse_type> ::= r[- | 0]

<file_ref>

指定要处理的文件的文件名和通配符或列表文件。

<file_ref> ::= @{listfile} | !{wildcard}

Option        Description
{listfile}    Specifies name of list file. See List file description.
{wildcard}    Specifies wildcard or filename.

例子

7z a -tzip src.zip *.txt -ir!DIR1\*.cpp

将当前目录下的所有 *.txt 文件以及目录 DIR1 和其所有子目录中的所有 *.cpp 文件添加到 src.zip 档案中。

相关内容