3

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

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

3 回答 3

1
@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"
于 2012-11-29T15:43:48.937 回答
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)。

于 2012-11-29T15:04:56.610 回答
0

对不起大家。

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

于 2012-11-30T14:21:26.647 回答