|
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
|
|