Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用7z.exe进行递归解压缩_Windows_Batch File_Unzip_7zip - Fatal编程技术网

Windows 使用7z.exe进行递归解压缩

Windows 使用7z.exe进行递归解压缩,windows,batch-file,unzip,7zip,Windows,Batch File,Unzip,7zip,我无意中发现下面这一行是提取每个子文件夹中每个.zip文件的一种方法 FOR /F "usebackq" %a in (`DIR /s /b *.zip`) do 7z.exe e %a 我在WinXP cmd.exe提示符下尝试了此操作,但出现错误: "a was unexpected at this time." 谁能告诉我上面这条线有什么问题吗。这是7z.exe错误还是批处理脚本语法有问题。我确实把它剪切粘贴到了一个.bat文件中 干杯试着用%a改变%a: FOR /F "usebac

我无意中发现下面这一行是提取每个子文件夹中每个.zip文件的一种方法

FOR /F "usebackq" %a in (`DIR /s /b *.zip`) do 7z.exe e %a
我在WinXP cmd.exe提示符下尝试了此操作,但出现错误:

"a was unexpected at this time."
谁能告诉我上面这条线有什么问题吗。这是7z.exe错误还是批处理脚本语法有问题。我确实把它剪切粘贴到了一个.bat文件中


干杯

试着用%a改变%a

FOR /F "usebackq" %%a in (`DIR /s /b *.zip`) do 7z.exe e %%a

阅读的帮助,然后在命令提示符下尝试以下操作

FOR /R %a IN (*.zip) DO @ECHO 7z e "%a"
请注意,我们已将%a附在“

检查输出的有效性后,删除回显。我建议将命令移动到BAT文件中。在这种情况下,将%a更改为%%a

@echo off
FOR /R %%a IN (*.zip) DO (
  7z e "%%a"
)
基于@PA.的答案(当您验证输出是否符合您的要求时,请记住删除
@echo
),如果您希望在zip文件中保留目录结构,请使用
x
命令而不是
e

FOR /R %a IN (*.zip) DO @echo 7z x "%a"
如果要将文件解压缩到与各自zip文件同名的文件夹中,请使用
-o
开关和
%~n
文件名提取器前缀:

FOR /R %a IN (*.zip) DO @echo 7z x "%a" -o"%~na"
最后,如果要执行上述所有操作并覆盖任何现有文件,请使用
-aoa
开关:

FOR /R %a IN (*.zip) DO @echo 7z x "%a" -o"%~na" -aoa
有用的资源
批处理文件 下面是一个批处理脚本,它适用于当前文件夹中的所有zip文件(假设安装了7zip)。它默认为
echo
ing运行哪些命令,并且只有在传入
/y
时才会运行(如中所示,是的,请立即执行解压缩)


您是否尝试使用
%%a
?这是答案。现在您最好单击“回答问题”“所以我可以接受你的答案,并给你一些分数。”:-)谢谢你的帮助。第二个建议PA也很酷,谢谢-我需要你使用的双引号。有人能解释一下usebackq的意思和它的来源吗?@Pat:它用来告诉解析引擎使用反引号来识别要处理的命令或文件名。查看
DIR/s/b*.zip
:: To actually include the path expansion character (tilde), I had to give valid numbers; see http://ss64.com/nt/rem.html for bug reference. Also, try call /? for more info.
@REM The %~n0 extracts the name sans extension to use as output folder. If you need full paths, use "%~dpn0". The -y forces overwriting by saying yes to everything. Or use -aoa to overwrite.
@REM Using `x` instead of `e` maintains dir structure (usually what we want)

@FOR /R %%a IN (*.zip) DO @(
    @if [%1] EQU [/y] (
        @7z x "%%a" -o"%%~dpna" -aoa
    ) else (
        @echo 7z x "%%a" -o"%%~dpna" -aoa
    )
)

@echo USAGE: Use /y to actually do the extraction