Следующий код может использоваться для получения текущей даты и времени в формате dd_MM_yyyy_hhmmss
вне зависимости от того, какая страна настроена для учетной записи, используемой для запуска командного файла:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
if exist %SystemRoot%\System32\robocopy.exe for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do set "CurrentDateTime=%%K_%%J_%%I_%%L%%M%%N" & goto CopyDirectory
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "CurrentDateTime=%%I"
set "CurrentDateTime=%CurrentDateTime:~6,2%_%CurrentDateTime:~4,2%_%CurrentDateTime:~0,4%_%CurrentDateTime:~8,6%"
:CopyDirectory
%SystemRoot%\System32\xcopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%CurrentDateTime%\" /C /E /H /I /K /Q /R /Y >nul
endlocal
В коде используется ROBOCOPY , чтобы получить текущий регион даты и времени независимо от его доступности, что по умолчанию имеет место для Windows Vista и Windows Server 2003 и всех более поздних версий Windows. Гораздо более медленное решение с WMI C используется в Windows XP, на котором ROBOCOPY недоступен по умолчанию.
Подробное описание трех командные строки, используемые для получения текущей даты и временного региона независимо от ROBOCOPY или WMI C прочтите мой ответ на Время установлено неправильно после полуночи .
См. Также мой ответ на одну строку с несколькими командами с использованием Windows пакетного файла для объяснения оператора &
, который используется для запуска команды GOTO сразу после определение переменной окружения CurrentDateTime
в результате обработки вывода первой строки командой ROBOCOPY с датой и временем, что приводит к выходу из l oop перед обработкой следующей строки.
Это будет Намного лучше использовать как формат даты / времени yyyy-MM-dd_hhmmss
, который является международным форматом даты. Его большое преимущество состоит в том, что несколько подкаталогов в C:\temp\HTML_Reports
с именем HTML_Reports_yyyy-MM-dd_hhmmss
отображаются в алфавитном порядке по имени, а также отображаются в хронологическом порядке. Это действительно помогает получить лучший обзор каталогов с отчетами HTML.
Код, необходимый для формата даты / времени yyyy-MM-dd_hhmmss
, при этом не нужно писать как можно больше в одной командной строке для наиболее эффективного выполнение:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
if exist %SystemRoot%\System32\robocopy.exe (
for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do (
%SystemRoot%\System32\robocopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%%I-%%J-%%K_%%L%%M%%N" /E /R:3 /W:2 /NDL /NFL /NJH /NJS
goto EndBatch
)
)
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "CurrentDateTime=%%I"
set "CurrentDateTime=%CurrentDateTime:~0,4%-%CurrentDateTime:~4,2%-%CurrentDateTime:~6,2%_%CurrentDateTime:~8,6%"
%SystemRoot%\System32\xcopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%CurrentDateTime%\" /C /E /H /I /K /Q /R /Y >nul
:EndBatch
endlocal
Этот командный файл использует ROBOCOPY , чтобы получить независимую от региона текущую дату и время и скопировать каталог, если он доступен. В противном случае WMI C используется для получения текущей даты и времени независимо от региона, а XCOPY используется для копирования каталога.
Вся задача может быть выполнена с пакетный файл, содержащий только одну командную строку при несовместимости с Windows XP, должен быть принят во внимание и, предполагая, что необходимые расширения команд включены и не требуются, отложенное расширение переменной среды отключено по умолчанию:
@for /F "tokens=1-6 delims=/: " %%I in ('%SystemRoot%\System32\robocopy.exe "%SystemDrive%\|" . /NJH') do @%SystemRoot%\System32\robocopy.exe "C:\temp\LR_Results\HTML_Report" "C:\temp\HTML_Reports\HTML_Report_%%I-%%J-%%K_%%L%%M%%N" /E /R:3 /W:2 /NDL /NFL /NJH /NJS & goto :EOF
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки , выполните в нем следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
echo /?
endlocal /?
for /?
goto /?
if /?
robocopy /?
set /?
setlocal /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?
xcopy /?