【问题标题】:Batch: Extracting each zip in folder x, to a seperate folder批处理:将文件夹 x 中的每个 zip 提取到单独的文件夹中
【发布时间】:2014-03-14 12:50:55
【问题描述】:

'你好,

使用批处理(或 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 作为上面批处理线的基础。

有什么建议吗?

【问题讨论】:

    标签: batch-file powershell zip


    【解决方案1】:

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

    假设您在 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;
    }
    

    【讨论】:

    • 谢谢!我知道这些差异 - 我只需要在 W2k8 服务器上执行一个简单的脚本,无需任何额外的安装(我们提供它包括 7z :])就像一个魅力!唯一的事情是;我找不到任何 7za.exe。所以我把ti改成了7z.exe;这也很有效;-p 干杯!
    • 很高兴听到这个消息! 7za.exe 是命令行版本,但我猜 7z.exe 也可以工作:) 干杯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多