【问题标题】:Zip batch command and ExcelZip 批处理命令和 Excel
【发布时间】:2012-11-17 16:04:03
【问题描述】:

我有许多 excel 文件,我需要将它们压缩到各自的 zip 文件夹中。我以为我已经解决了这个问题,但我有同事回过头来告诉我他们无法打开 Excel 文件,因为它已损坏。我回去检查了原始文件,它打开得很好。但是当我打开相同版本的压缩文件时,我也得到了损坏的错误。我在使用Office 2010,可以修复它,但是我的同事都是Office 2007,似乎无法修复该文件。我的批处理代码如下:

for /r %%X in (*.xlsm) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%~nX" "%%X"

【问题讨论】:

    标签: excel batch-file cmd office-2007 7zip


    【解决方案1】:

    我认为您可能使用了错误的值作为 7zip 可执行文件的第一个参数。根据FOR上的文档:

    %~nI - 仅将 %I 扩展为文件名

    根据 7zip 文档:

    您可以使用带有单个字母 a 的“a”命令。此命令代表“归档”或“添加”。使用它将文件放入存档中。 您必须指定目标存档和源文件(按此顺序)。

    因此,将您的脚本与示例文件一起使用,在我看来,您的命令行变为:

    "C:\Program Files\7-Zip\7z.exe" a -tzip "somefile.xlsm" "C:\path\to\somefile.xlsm"
    

    第一个参数最后不应该有.zip 文件扩展名吗?所以该行被修改为如下所示:

    for /r %%X in (*.xlsm) do "C:\Program Files\7-Zip\7z.exe" a -tzip "%%~nX.zip" "%%X"
    

    虽然很烦人,但文件扩展名实际上在 Windows 中意味着什么。您的上一行创建了一个扩展名为 .xlsm 的 zip 文件。当人们尝试打开这些文件时,Excel 会抱怨(因为它是一个 zip 文件;而不是 .xlsm)。

    【讨论】:

    • 我认为第一个参数"%%~nX" 是为完成的文件命名,因为我指定了-tzip,所以我不需要担心添加扩展名。而~n 是为了防止它成为somefile.xlsm.zip。这不正确吗?
    • 我认为您可能是正确的。我想我对 7zip 命令行并不熟悉。
    【解决方案2】:
    @Echo OFF
    PUSHD "C:\Program Files\7-Zip" && (
        FOR /R "%CD%" %%# in (*.xlms) DO (7z a -tzip "%%~n#.zip" "%%#")
        POPD
    )
    REM Don't worry about the PUSHD command, the %CD% variable isn't expanded, that's the trick.
    Pause&Exit
    

    如果您想将所有内容放在一个文件中,可以使用动态运算符 *(星号)和 7zip -recursive 参数:

    7z a -r -tzip "ALL.zip" "*.xlsm"
    

    【讨论】:

      【解决方案3】:

      对不起各位。

      这是一场虚惊。原来它不是所有的文件,但只有少数几个。这些文件按区域划分,唯一损坏的是第一个区域。为什么?我只能假设它们被我最初制作批处理文件的尝试破坏了,因为所有其他文件都与完成的批处理一起压缩,因此没有错误。所以我的剧本没有错。不过感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-07
        • 2016-04-13
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        相关资源
        最近更新 更多