zip使用批处理文件

时间:2012-12-10 03:48:05

标签: batch-file zip

我需要创建一个使用批处理解压缩文件的条件。

方法如下: 如果dummy = 1,批处理将xlsx文件解压缩到特定文件夹,否则,它会将另一个xlsx文件直接复制到该文件夹​​。

我的代码如下:

set dummy=1

If %dummy% EQU 1 (
SET CHEMIN=C:\file_to_unzip
cd %CHEMIN%
for /f %%j in ('dir /b %CHEMIN%\*.zip') do (
C:\PROGRA~1\WinZip\Winzip32 -min -e -o -j %CHEMIN%\%%j %CHEMIN%
) 
COPY "C:\file_to_unzip\*.xlsx" "C:\destination" 
) else (
COPY "C:\file_to_copy\*.xlsx" "C:\destination"
)

问题是如果没有IF条件,unzip命令将正常工作。但是一旦包含IF条件,cmd就会说找不到zip文件。我不确定是什么导致了这个问题以及如何解决这个问题。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

您是否启用了延迟扩展? setlocal enabledelayedexpansion 使用上面的示例代码,由于在if语句中设置了CHEMIN变量,将发生故障。如果在括号范围内设置了变量,则在所有子范围结束之前,该变量的新值集将不可用。运行以下脚本以查看我的意思:

@echo off
set "xValue=1"
echo.%xValue%
if 1 EQU 1 (
    set "xValue=2"
    echo.%xValue%
    echo.!xValue!
)

如果禁用延迟扩展(默认情况下),结果将为

1
1
1

如果启用,请在开头添加setlocal enabledelayedexpansion

1
1
2

按如下方式试用您的脚本。使用

setlocal enabledelayedexpansion

set dummy=1

If %dummy% EQU 1 (
    SET CHEMIN=C:\file_to_unzip
    cd !CHEMIN!
    for /f %%j in ('dir /b !CHEMIN!\*.zip') do (
        C:\PROGRA~1\WinZip\Winzip32 -min -e -o -j !CHEMIN!\%%j !CHEMIN!
    )
    COPY "C:\file_to_unzip\*.xlsx" "C:\destination" 
) else (
    COPY "C:\file_to_copy\*.xlsx" "C:\destination"
)

另一种解决方案是将set CHEMIN=C:\file_to_unzip行移到if语句之外。