3

我需要为使用批处理解压缩文件创造条件。

方法如下:如果 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 条件,解压缩命令将正常工作。但是一旦包含了 IF 条件,cmd 就会说找不到 zip 文件。我不确定是什么导致了这个问题以及如何解决这个问题。

任何帮助表示赞赏。

4

1 回答 1

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 语句之外。

于 2012-12-10T04:11:25.453 回答