2012-11-29 55 views
3

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

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

回答

0

对不起球员。

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

1

我想你可能会使用错误的值作为7zip可执行文件的第一个参数。据对FOR文档:

%〜镍 - 将%I扩充到一个文件名只

而且根据7zip的文件:

您可以使用“一“命令与单个字母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)。

+0

我以为第一个参数'“%%〜nX”'是要命名完成的文件,并且因为我已经指定了 - 我不需要担心扩展名。而'〜n'是为了防止它成为'somefile.xlsm.zip'。那是不正确的? – JHStarner

+0

我想你可能是对的。我想我不像我应该那样熟悉7zip命令行。 –

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"