Dremuk
28-01-2010, 14:22
Такая задача: нужно скопировать файлы созданные в четверг или пятницу прошлого года с диска С на E. Не работает. Причем во внутренний цикл не передается переменная DoW и NN не хочет устанавливаться. ПОМОГИТЕ исправить ошибку, пожалуйста
@ECHO OFF
ECHO.
CLS
for /r C:\ %%A in (*.*) do (
@for /F "eol= skip=5 tokens=1-3 delims=." %%B IN ('DIR "%%A"') DO (
@for /F "tokens=1" %%E IN ('echo "%%D"') DO (
IF %iDate%==0 CALL :DoW %%C %%B %%E
IF %iDate%==1 CALL :DoW %%B %%C %%E
IF %iDate%==2 CALL :DoW %%E %%C %%B
rem Определяем текущий день недели по готовому алгоритму
SET NN=%%E
SET /A Day=4
SET /A Run=0
rem Устанавливаем запуск по четвергам и пятницам
IF "%Day%"=="4" SET /A Run=1
IF "%Day%"=="5" SET /A Run=1
IF not "%NN%"=="%YYear%" SET /A Run=0
echo %%A %%B %%C %Day% %Run% %YYear% %NN%
IF "%Run%"=="1" xcopy %%A E:\
)
)
)
GOTO:EOF
:: алгоритм вычисления дня недели прошлого года
:DoW
SET /A Data=%1
SET /A Month=%2
SET /A Year=%3
IF %Month% GTR 2 (SET /A Month=%Month%-3) ELSE (SET /A Year=%Year%-1 & SET /A Month=%Month%+9)
SET /A ta=146097*((%Year%) /100)/4
SET /A tb=1461*(%Year% %% 100)/4
SET /A tc=(153*%Month%+2)/5+%Data%+1721119
SET /A DoW = (%ta%+%tb%+%tc%) %% 7 + 1
SET DoW=%DoW%
GOTO:EOF
@ECHO OFF
ECHO.
CLS
for /r C:\ %%A in (*.*) do (
@for /F "eol= skip=5 tokens=1-3 delims=." %%B IN ('DIR "%%A"') DO (
@for /F "tokens=1" %%E IN ('echo "%%D"') DO (
IF %iDate%==0 CALL :DoW %%C %%B %%E
IF %iDate%==1 CALL :DoW %%B %%C %%E
IF %iDate%==2 CALL :DoW %%E %%C %%B
rem Определяем текущий день недели по готовому алгоритму
SET NN=%%E
SET /A Day=4
SET /A Run=0
rem Устанавливаем запуск по четвергам и пятницам
IF "%Day%"=="4" SET /A Run=1
IF "%Day%"=="5" SET /A Run=1
IF not "%NN%"=="%YYear%" SET /A Run=0
echo %%A %%B %%C %Day% %Run% %YYear% %NN%
IF "%Run%"=="1" xcopy %%A E:\
)
)
)
GOTO:EOF
:: алгоритм вычисления дня недели прошлого года
:DoW
SET /A Data=%1
SET /A Month=%2
SET /A Year=%3
IF %Month% GTR 2 (SET /A Month=%Month%-3) ELSE (SET /A Year=%Year%-1 & SET /A Month=%Month%+9)
SET /A ta=146097*((%Year%) /100)/4
SET /A tb=1461*(%Year% %% 100)/4
SET /A tc=(153*%Month%+2)/5+%Data%+1721119
SET /A DoW = (%ta%+%tb%+%tc%) %% 7 + 1
SET DoW=%DoW%
GOTO:EOF