Войти

Показать полную графическую версию : [решено] Сложная проверка условия


murmax-91
29-08-2012, 20:29
Имеется такой код:

if %dat% LEQ 15
if !s!==0 (
copy "%%i" %c_path% > nul
echo %c_path%\%%~nxi >> %SYSTEMDRIVE%\report.log
echo %c_path%\%%~nxi >> %lst%
set /a coun+=1
)

При выполнении пишет "Не предвиденное появление: 15."

Foreigner
29-08-2012, 20:56
murmax-91, Ты скобки забыл

murmax-91
29-08-2012, 21:20
Со скобками тоже самое(

Foreigner
29-08-2012, 22:42
Со скобками тоже самое( »

Ну а переменные определены? По твоему примеру можно только гадать.

murmax-91
29-08-2012, 22:45
Вот весь код....

@echo off
PATH=%PATH%;%ProgramFiles%\WinRAR\

set outFile=%TEMP%\out.txt
set lst=%TEMP%\report.lst
call :FromNow -100
set c_path=D:\%ddmmyyyy%

if not exist %c_path% MkDir %c_path%
if exist %SYSTEMDRIVE%\report.log del %SYSTEMDRIVE%\report.log
if exist %lst%\report.lst del %lst%\report.lst
if exist %SYSTEMDRIVE%\%date%.rar del %SYSTEMDRIVE%\%date%.rar

set coun=0

setlocal enabledelayedexpansion
for /R "%SYSTEMDRIVE%\minecraft.pvp.gs" %%i in (*.*) do (
set d=%%~ti
set dat=%d:~0,2%
set /a s=!d:~1,1! %% 2

if %dat% LEQ 15 (
if !s!==0 (
copy "%%i" %c_path% > nul
echo %c_path%\%%~nxi >> %SYSTEMDRIVE%\report.log
echo %c_path%\%%~nxi >> %lst%
set /a coun+=1
)
)
)
EndLocal& set count=%coun%

rar a -df -idq -sl2097152 %SYSTEMDRIVE%\%date%.rar @%lst%

echo. >> %SYSTEMDRIVE%\report.log

echo Количество скопировенных файлов: %count% >> %SYSTEMDRIVE%\report.log

echo. >> %SYSTEMDRIVE%\report.log
echo. >> %SYSTEMDRIVE%\report.log

rar lb %SYSTEMDRIVE%\%date%.rar > %outFile%

echo Список файлов в архиве >> %SYSTEMDRIVE%\report.log

echo. >> %SYSTEMDRIVE%\report.log

set count=0
for /F %%i in (%outFile%) do (
echo %%i >> %SYSTEMDRIVE%\report.log
set /a count+=1
)
del %outFile% >nul
rem del %lst% >nul
echo. >> %SYSTEMDRIVE%\report.log
echo Количество файлов в архиве: %count% >> %SYSTEMDRIVE%\report.log

:FromNow
SetLocal
Set yyyy=%DATE:~-4%& set /a mm=100%DATE:~3,2%%%100& set /a dd=100%DATE:~,2%%%100
Set /A JD=%~1+dd-32075+1461*(yyyy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yyyy+4900+(mm-14)/12)/100)/4
Set /A L=JD+68569,N=4*L/146097,L=L-(146097*N+3)/4,I=4000*(L+1)/1461001
Set /A L=L-1461*I/4+31,J=80*L/2447,K=L-2447*J/80,L=J/11
Set /A J=J+2-12*L,I=100*(N-49)+I+L
Set /A yyyy=I,mm=100+J,dd=100+K
EndLocal& Set ddmmyyyy=%dd:~-2%.%mm:~-2%.%yyyy%
goto:eof

Foreigner
29-08-2012, 23:43
Вот что сразу бросилось в глаза.

set d=%%~ti
set dat=%d:~0,2%


У тебя не определена переменная %dat%. В твоем случае надо:

set dat=!d:~0,2!

if !dat! LEQ 15 (

murmax-91
30-08-2012, 07:33
Заработало, но условие не выполняется...

murmax-91
30-08-2012, 21:37
Вот рабочий код для истории:

setlocal enabledelayedexpansion
for /R "%SYSTEMDRIVE%\minecraft.pvp.gs" %%i in (*.*) do (
set d=%%~ti
set dat=!d:~0,2!
set /a s=!d:~1,1! %% 2
if "!dat!" LEQ "15" (
@if !s!==0 (
copy "%%i" %c_path% > nul
echo %c_path%\%%~nxi >> %SYSTEMDRIVE%\report.log
echo %c_path%\%%~nxi >> %lst%
set /a coun+=1
)
)
)
EndLocal& set count=%coun%




© OSzone.net 2001-2012