Запись времени в файл в цикле for

Запись времени в файл в цикле for

В Windows 2008: Я пытаюсь заархивировать и скопировать файлы на резервный сервер. Я использую командную строку/пакетный файл, я записываю результат в файл журнала, теперь я хочу также записать время длякаждыйфайл зациклен.

Пакетный файл backupZipCopy.bat:

setlocal enabledelayedexpansion
echo starting at %date% %time%>>c:\backup\resuZip.log
d:
cd \myDirectoryToBackup
FOR %%i IN (*.nsf)  DO (
echo %date% %time%>>c:\backup\resuZip.log 
"C:\Program Files\7-Zip\7z.exe"  -bd u "\\backupServer\myBackup\%%~ni.zip" "%%~fi">>c:\backup\resuZip.log
)

Моя проблема:Настало времятакой жена протяжении всей партии (время, когда партияначалкогда я ожидал реального времени в каждом цикле). Я уже указал setlocal enabledelayexpansion, что не помогает (так нужно ли мне это или нет?).

NB timethis не решит мою проблему, так как мне нужно время в каждом цикле. NB2 Я вызываю этот пакет из планировщика окна.

решение1

Проблема в том, что в строке ( ( )блок анализируется как одна строка) все %foo%переменные оцениваются только один раз, перед запуском forцикла.

Опцияenabledelayedexpansionделаетhelp. Однако это не меняет правила разбора обычного %foo%синтаксиса переменных. Вместо этого он вводит новый — использование !в качестве разделителей.

for %%i in (*.nsf) do (
    echo !date! !time!>> C:\backup\resuZip.log
)

Однако будьте очень осторожны с этим, поскольку отложенное расширение происходит после того, как %foo%переменные были расширены. Поэтому это приведет к неожиданному выводу, если %переменная содержит восклицательные знаки. Правила разбора cmd.exe порой просто болезненны.

Я настоятельно рекомендую вам использовать другой язык для вашего скрипта. PowerShell был бы хорошим выбором, учитывая, что он является частью последних выпусков Windows и имеет инструменты для управления различными компонентами Windows Server.

Связанный контент