我需要创建一个使用批处理解压缩文件的条件。
方法如下: 如果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文件。我不确定是什么导致了这个问题以及如何解决这个问题。
任何帮助表示感谢。
答案 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语句之外。