Zip批处理命令与Excel

Zip批处理命令与Excel,excel,batch-file,cmd,office-2007,7zip,Excel,Batch File,Cmd,Office 2007,7zip,我有许多excel文件,需要压缩到它们各自的压缩文件夹中。我以为我已经解决了这个问题,但我的同事回来告诉我,他们无法打开excel文件,因为它已损坏。我回去检查了原始文件,它打开得很好。但是当我打开压缩的文件的同一版本时,我也得到了损坏的错误。我在Office 2010上,它可以修复它,但我的同事都是Office 2007,似乎无法修复该文件。我的批次代码如下: 对于(*.xlsm)中的/r%%X,执行“C:\Program Files\7-Zip\7z.exe”a-tzip“%%~nX”“%%

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

对于(*.xlsm)中的/r%%X,执行“C:\Program Files\7-Zip\7z.exe”a-tzip“%%~nX”“%%X”

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

%~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)

如果您希望将所有内容合并到一个文件中,则可以使用动态运算符*(星号)和7zip递归参数:

7z a -r -tzip "ALL.zip" "*.xlsm"
对不起,伙计们


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

我认为第一个参数“%%~nX”
是命名完成的文件,因为我已经指定了-tzip,所以我不需要担心扩展名的问题。而
~n
是为了防止它成为
somefile.xlsm.zip
。这不对吗?我想你可能是对的。我想我对7zip命令行不太熟悉。
7z a -r -tzip "ALL.zip" "*.xlsm"