如果语句不起作用,则设置批处理脚本

时间:2013-12-26 08:18:13

标签: batch-file

我正在尝试使用带有7zip的批处理脚本压缩文件夹

但if语句中的SET函数不起作用;(

文件夹结构:

2000/
   01/
   02/
   03/
   04/
   05/
   06/
   07/
   08/
   09/
   10/
   11/
   12/
2001/
   01/
   02/
   03/
   04/
   05/
   06/
   07/
   ...

这是我的代码:

@ECHO OFF
setlocal
echo %date%
set logMonth=%date:~4,2%
set logDay=%date:~7,2%
set logYear=%date:~10,4%
set path="C:\Program Files\7-Zip\";%path%

if %logMonth% EQU 01 (

set logMonth=12
set /a logYear=%logYear%-1
7z a -tzip c:\%logYear%%logMonth%.zip   C:\files\v2-output\%logYear%\%logMonth%

) ELSE (

rem 1 saraas busad sar bol tuhain onii umnuh sariin folderiig ziplene 
set /a logMonth=%logMonth%-1
7z a -tzip c:\%logYear%%logMonth%.zip   C:\files\v2-output\%logYear%\%logMonth%

)
endlocal

如果当前月份相当于上一个月的01压缩文件夹,则压缩当前年度的前一个月。帮帮我们!

1 个答案:

答案 0 :(得分:2)

在块语句(a parenthesised series of statements)中,解析ENTIRE块并执行 THEN 。在块执行之前,块中的任何%var%将被该变量的值在块被分配的时间替换。

因此,IF (something) else (somethingelse)将在遇到%variables%时使用IF的值执行。

要克服此问题的两种常见方法是:1)使用setlocal enabledelayedexpansion并使用!var!代替%var%来访问var或2的中间值以进行调用一个子程序,用于使用更改的值执行进一步处理。

请注意,set /a执行的任何计算都假设任何以0开头的字符串都是 OCTAL 常量,因此set /a var+=%month%会产生月份错误= 08(8月)或09(9月),因为89无效 OCTAL 字符。

设置/ a会抑制前导零,因此set /a var=03会将var设置为3,而不是03。经典地,要使用带有前导零的DECIMAL值进行计算,您需要使用set /a value=1%value% - 1,然后使用[或设置value到] %value:~1%

所以 - 试试

if %logMonth% EQU 01 (
 set /a logMonth=112
 set /a logYear=%logYear%-1
) ELSE (
 rem 1 saraas busad sar bol tuhain onii umnuh sariin folderiig ziplene 
 set /a logMonth=1%logMonth%-1
)
set logmonth=%logmonth:~1%
7z a -tzip c:\%logYear%%logMonth%.zip   C:\files\v2-output\%logYear%\%logMonth%