Имя: Пароль:
IT
Админ
CMD: проблема с текущим временем в цикле
0 andrewks
 
18.05.12
10:00
есть такой батник:

echo Backup started at time: %date% %time% >> %LOGFN%
FOR /F "eol=; tokens=1,2 delims=," %%i in (inpath.txt) do (
  echo Backup files in %%i started at time: %date% %time% >> %LOGFN%
  "C:\Program Files\7-Zip\7z.exe" a -t7z -mx=7 -r -ssw "%%j_%MYDATE%.7z" "%%i" >> %LOGFN%
)
echo Backup stoped at time: %date% %time% >> %LOGFN%

почему-то в строке, выводящей дату/время, которая находится в цикле, значения даты/времени показываются не на момент фактического выполнения этой строки, а на начало захода в цикл

как исправить?
1 andrewks
 
18.05.12
10:41
ап
2 Jump
 
18.05.12
10:52
Может у тебя просто скрипт быстро отрабатывает, и время не успевает изменится.
3 andrewks
 
18.05.12
10:56
(2) в том-то и дело, что нет
4 Jump
 
18.05.12
11:15
(3)О как оказывается, нарыл в интернетах - командный интерпретатор запоминает %time% и на время выполнения она является константой.
Видимо логика оптимизации кода перед исполнением у интерпретатора такая.
5 andrewks
 
18.05.12
11:18
(4) не совсем так. в "основном" коде использование %time% даёт текущее время, проблема именно в цикле проявляется
6 andrewks
 
18.05.12
11:19
щас попробую вызывать другой батник, передав ему параметр выходного файла, наверное, прокатит, хотя и изврат
7 Jump
 
18.05.12
11:20
(4)Ну я про цикл и говорю - чтобы избежать многократного вызова, интерпретатор запоминает первый.
8 andrewks
 
18.05.12
20:54
обошёл так:


echo Backup started at time: %date% %time% >> %LOGFN%
FOR /F "eol=; tokens=1,2 delims=," %%i in (inpath.txt) do (
  echo Backup file db %%i, please, wait...
  call :subtime %%i
  "C:\Program Files\7-Zip\7z.exe" a -t7z -mx=7 -r -ssw "%%j_%MYDATE%.7z" "%%i" >> %LOGFN%
)
echo Backup stoped at time: %date% %time% >> %LOGFN%

goto :cmdend

:subtime
  echo Backup file db %1 started at time: %date% %time% >> %LOGFN%
  goto :eof

:cmdend