批处理:将文件夹x中的每个zip解压缩到一个单独的文件夹

时间:2014-03-14 12:50:55

标签: batch-file powershell zip

' ELLO,

使用Batch(或Powershell等),我想做以下事情: 从文件夹x,我想将所有.zip文件解压缩到他们自己的文件夹。

示例:

[Folder x]
- a.zip
- b.zip
- c.zip

[Folder x]
- [a]
- [b]
- [c]
- a.zip
- b.zip
- c.zip

直到我可以使用以下批次提取每个zip:

for /r %%f in (*.zip) do "C:\Program Files\7-Zip\7z.exe" x "%%f" -o"%%~dpf"

但是这导致所有内容都被提取到根文件夹而不是每个zip的新文件夹。 我使用Script to extract zip files in seperate folders to their own folders作为上述批次行的基础。

任何提示?

1 个答案:

答案 0 :(得分:2)

注意:这是一个PowerShell示例,与您的批处理脚本有很大不同。只是一个FYI。

假设您在c:\test文件夹中有一些ZIP文件。以下脚本将:

  • c:\test
  • 中获取ZIP文件列表
  • 对于每个ZIP文件...
    • 根据ZIP文件创建一个文件夹"基本名称" (文件名无扩展名)
    • 构建命令行参数以解压缩ZIP文件
    • 解压缩ZIP文件

要使此代码适合您,您需要更新:

  • ZIP文件的路径
  • 7za.exe的路径
    • 如果7za.exe环境变量中包含PATH,则无需指定可执行文件的完整路径。我只是为了清晰起见。

脚本:

$ZipFileList = Get-ChildItem -Path c:\test\*.zip;

foreach ($ZipFile in $ZipFileList) {
    mkdir -Path ('{0}\{1}' -f $ZipFile.Directory, $ZipFile.BaseName);
    $ArgumentList = 'x "{0}" -o"{1}\{2}\"' -f $ZipFile.FullName, $ZipFile.Directory, $ZipFile.BaseName;
    Start-Process -FilePath c:\windows\7za.exe -ArgumentList $ArgumentList -Wait;
}