2013-12-26 3 views
1

Я пытаюсь компресс папки с помощью пакетного сценария с 7zipпакетный скрипт установлен внутри, если оператор не работает

Но 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 компресс папка л месяц по сравнению с предыдущим годом, иначе сжать предыдущий месяц текущего года. Помогите ребятам!

ответ

2

В блочном заявлении (a parenthesised series of statements) проанализирован блок ENTIRE и THEN выполнено. Любой %var% внутри блока будет заменен значением этой переменной В ВРЕМЯ БЛОК ПРОВЕРЕН - до того, как блок выполнен.

Следовательно, IF (something) else (somethingelse) будет выполнен с использованием значений %variables% в момент возникновения ошибки IF.

Два распространенный способ преодоления этого является: 1) использовать setlocal enabledelayedexpansion и использовать !var! вместо %var%, чтобы получить доступ к chnaged значения var или 2) для вызова подпрограммы, чтобы выполнить дальнейшую обработку с использованием измененных значений.

Обратите внимание, что любой расчет выполняется с помощью set /a предполагает, что начиная с любой строкой 0 является OCTAL постоянным, следовательно, set /a var+=%month% будет выдавать ошибку за месяц = ​​08 (августа) или 09 (сентября), потому что 8 и 9 не действительны OCTAL символов.

Set/а подавляет ведущие нули, так 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% 
Смежные вопросы