Динамическая переменная среды DATE
предоставляет текущую локальную дату в формате, зависящем от региона, т. Е. В соответствии со страной, заданной в параметрах региона и языка Windows для используемой учетной записи.Статья Википедии Формат даты по стране перечисляет различные форматы даты, используемые в странах по всему миру.
Поэтому необходимо запускать с учетной записью, используемой для запуска пакетного файла, в командной строкеокно echo %DATE%
и посмотрите строку выходной даты.
Начинается ли выходная дата с сокращенного дня недели или дата выводится без дня недели?Первый выходной день и следующий месяц с цифрами или первый выходной месяц и следующий день?Месяц выводится как число или с именем?День месяца или месяц со значением меньше 10 выводится с начальным 0 и поэтому всегда с двумя цифрами или только с одной цифрой?
Очень распространенная командная строка для изменения строки даты, зависящей от региона, в формате..., DD.MM.YYYY
с .
или /
или любым другим символом-разделителем для YYYYMMDD
:
set "LocalDate=%DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%"
Строка даты подставляется справа, чтобы сделать подстановку строк независимой от наличия дня недели в началестрока даты.
Для строки даты, зависящей от региона ..., MM/DD/YYYY
используемая командная строка:
set "LocalDate=%DATE:~-4%%DATE:~-10,2%%DATE:~-7,2%"
Какую подстановку строки необходимо выполнить, можно легко определить, выполнив команды в командеокно запроса с использованием команды ECHO вместо SET :
echo %DATE%
echo %DATE:~-4%%DATE:~-7,2%%DATE:~-10,2%
echo %DATE:~-4%%DATE:~-10,2%%DATE:~-7,2%
См. также Что означает% date: ~ -4,4 %% date:~ -10,2 %% дата: ~ -7,2% _% время: ~ 0,2 %% время: ~ 3,2% среднее?
Преимущество использования динамической переменной средыDATE
- это скорость, поскольку подстановка строк выполняется командным процессором Windows ve.очень быстроНедостатком является изменяющийся формат даты из-за зависимости региона / страны.
Независимое от региона решение использует команду WMIC , как показано ниже:
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "LocalDate=%%I"
set "LocalDate=%LocalDate:~0,8%"
WMIC всегда выводит строку даты в формате ГГГГММДДЧЧммSS.microsecond ± UTC независимо от того, какая страна настроена и какой формат даты установлен для страны.
Недостаток использования WMIC заключается в том, чтовремя, необходимое для выполнения, так как для вывода строки даты требуется более секунды, закодированный в формате UTF-16 Little Endian, обработанный следующей командой FOR .
См. ответ по % date%выдает другой результат в командном файле при запуске из запланированных задач на сервере 2016 для очень подробного объяснения того, как эти две командные строки работают при выполнении командным процессором Windows cmd.exe
.
Полный пакетный файл:
@echo off
cd /D "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn"
bcp.exe "SELECT TOP 100 * FROM xxxx.dbo.xxxxx" queryout C:\test\csv\confirmed.csv -t, -c -S xxxx\xxxxx -U xxx -P xxxxxxxxxx
for /F "tokens=2 delims==." %%I in ('%SystemRoot%\System32\wbem\wmic.exe OS GET LocalDateTime /VALUE') do set "LocalDate=%%I"
set "LocalDate=%LocalDate:~0,8%"
copy /Y C:\test\csv\confirmed.csv C:\test\csvwithdates\confirmed-%LocalDate%.csv
set "LocalDate="
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки и выполните тамследующие команды и полностью прочитайте все справочные страницы, отображаемые для каждой команды.
cd /?
copy /?
echo /?
for /?
set /?
wmic /?
wmic os /?
wmic os get /?
wmic os get localdatetime /?