【问题标题】:7zip Unzip Folder, rename contents, rezip folder7zip解压缩文件夹,重命名内容,重新压缩文件夹
【发布时间】:2018-03-12 23:12:22
【问题描述】:

我有一个包含数千个文件夹的列表。在这些文件夹中是 zip 文件。我需要解压缩文件夹,将压缩文件夹的内容重命名为“压缩文件夹名称”和“_”和“文件名”,然后重新压缩解压缩的文件夹。我已经尝试过这个批处理代码,但它不起作用,因为它所做的只是创建一个带有压缩文件名的文件夹。任何帮助表示赞赏!我有 7zip 和 powershell 作为我使用的主要选项,但我会尽一切努力。

@echo off
setlocal enableextensions disabledelayedexpansion
for %%z in (*.zip) do (
    if not exist "%%~nz" md "%%~nz"
    7za e -o"%%~nz" "%%~fz"
    for %%f in ("%%~nz\*") do ren "%%~ff" "%%~nz - %%~nxf"
)

【问题讨论】:

  • '我试过这个批处理代码,但它不起作用。'不是一个充分的问题描述;请update your question 为我们这些没有坐在您的计算机旁的人提供足够的信息,以便更好地了解正在发生的问题。通常的做法是打开echoing 并从cmd.exe 窗口运行脚本,以便您可以清楚地看到它的输出,如有必要,请将其复制到您的问题中。
  • 我已经用我的批处理文件的输出更新了这个问题。
  • 无输出,运行您的批处理文件似乎已添加。另外,7za.exe 是否也在与.zip 文件相同的目录中?

标签: batch-file 7zip


【解决方案1】:

您的代码缺少归档步骤。
我建议将修改后的档案放到一个单独的目录中,这样万一出现问题,您的原始文件将保持不变。

这是可能的代码:

@echo off
setlocal enableextensions disabledelayedexpansion
set OUTPUT_DIR=..\output
md "%OUTPUT_DIR%"
for %%z in (*.zip) do (
    if not exist "%%~nz" md "%%~nz"
    7za e -o"%%~nz" "%%~fz"
    for %%f in ("%%~nz\*") do ren "%%~ff" "%%~nz - %%~nxf"
    7za a -tzip "%OUTPUT_DIR%\%%~nz.zip" ".\%%~nz\*"
) 

而且,由于您使用的是-e 而不是-x,我假设您的 zip 存档是扁平的,即它们在子目录中没有重复的文件名。

【讨论】:

  • 要检查目录是否存在,您应该使用尾部反斜杠,例如if not exist "%%~nz\" md "%%~nz".
  • @wolfrevokcats,当我将它保存为批处理文件并运行它时,它会创建一个压缩文件夹名称的文件夹。
  • 你看到output目录出现在父目录中了吗?
  • 是的,输出文件夹出现在父目录中,但我需要它出现在同一目录中。
  • 那肯定是错的。考虑其中一个 zip 文件与输出目录同名的情况。然后存档器将尝试存档已存档的内容。这将导致混乱。如果您想将所有文件保存在一个地方,您最好将您的 zip 文件移动到 input 子目录并从那里运行批处理。不要忘记在每次运行前删除新生成的文件/目录。
猜你喜欢
  • 1970-01-01
  • 2010-09-05
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2013-10-30
  • 1970-01-01
  • 2019-02-24
相关资源
最近更新 更多