Zip批处理命令和Excel

我有许多excel文件,我需要压缩到每个自己的zip文件夹。 我想我已经解决了这个问题,但是我有同事回到我这里说他们不能打开excel文件,因为它已经被破坏了。 我回去检查原始文件,它打开就好了。 但是,当我打开压缩文件的相同版本,我也得到了损坏的错误。 我在Office 2010上,可以修复它,但我的同事都是Office 2007,似乎无法修复该文件。 我的批处理代码如下:

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

我想你可能会使用一个错误的值作为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中的意思。 您的上一行是创build一个带有.xlsm扩展名的zip文件。 当人们尝试打开这些文件时,Excel会抱怨(因为它是一个zip文件;而不是.xlsm)。

 @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 

你可以使用dynamic运算符*(星号)和7ziprecursion参数,如果你想在一个文件中一起使用:

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

对不起大家。

这是一场虚惊。 原来这不是所有的文件,但只有less数select。 文件按区域划分,唯一被腐败的是第一个区域。 为什么? 我只能假设他们是由我最初的尝试在创build一个batch file损坏,因为所有其他文件与完成的批量压缩,因此没有错误。 所以我的脚本没有错。 感谢您的帮助,但。