Показать полную графическую версию : [решено] Команды в Win (date /T). Выбор формата даты.
Привет всем!
Такой вопрос, помогите разобраться, пожалуйста.
Ежедневно по крону отрабатывает bat-файл, который создаёт каталог с текущей датой:
mkdir c:\%DATE%
Как положено, появляется папочка c:\04.03.2009
На большинстве серверов (win2003) отрабатывает прекрасно, но попалась машина, которая вместо каталога с датой, создала:
c:\Ср
И действительно, в командной строке, команда: echo %DATE%, или DATE /T, выводит:
Ср 04.03.2009
В языковых стандарты (панели управления), формат даты указан, как dd.MM.yyyy.
Где указывается эта настройка? Подскажите пожалуйста, кто знает.
Petya V4sechkin
04-03-2009, 11:26
timur_m, посмотрите параметр sShortDate в разделе реестра HKEY_CURRENT_USER\Control Panel\International. А если батник работает от имени SYSTEM, то в ветке HKEY_USERS\.DEFAULT\Control Panel\International.
Вот .bat файл для получения даты и времени независимо от региональных настроек на компьютере. Из текста видно, что формируются 7 переменных, которые можно использовать в любой удобной комбинации.@echo off
:: Code by Herbert Kleebauer
echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=>d_t.com
echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6>>d_t.com
echo LisqMz`wGH@wKuur`G@w?ogBgGG}G?j_egoNOG?w?`gBLksqgG`w?WgBgG>>d_t.com
echo G}G?R_MgoNMy?wSx@W?s?W?@zAB`LrFuBLyt~vuco{@LuKooD?BFHqrIcP>>d_t.com
echo _sdDxb1T??=?rILO_sdDqx1T??=?rILO_sdDnl1T??=?rILO_sdD`c1T??>>d_t.com
echo =?rILO_sdDgg1T??=?rILO_sdDll1T??=?rILO_sdDrr1T??=??IL?0xxx>>d_t.com
FOR /F "delims=" %%i IN ('d_t.com') DO %%i
del d_t.com
echo century: %_cy%
echo year: %_yr%
echo month: %_mo%
echo day: %_da%
echo hour: %_hh%
echo minute: %_mm%
echo second: %_ss%
echo all: %_cy%%_yr%-%_mo%-%_da% %_hh%:%_mm%:%_ss%
echo.
echo %DATE% %TIME%
pause>nulМожет пригодится.
Важно: создаваемый батником файл d_t.com является 16-разрядным приложением и не сможет работать на х64 ОС.
tr011_tmn
04-03-2009, 21:19
gora,
а такой вопрос, имеется:
set D=%date:~0,2%
set M=%date:~3,2%
set Y=%date:~8,2%
set /a DD=%D% - 0
set /a MM=%M% - 0
set DT=%DD%.%MM%.%Y%
при использовании:
echo %DT%
получаем:
4.3.09
если же ввести:
set /a YY=%Y% - 0
то получаем:
Неправильное число. Числовые константы должны быть десятичными (17)
шестнадцатеричными (0x11),или восьмеричными (021).
То есть дату обрезать не получится, до результата 4.3.9?
tr011_tmn, так будет корректнее:set D=1%date:~0,2%
set M=1%date:~3,2%
set Y=1%date:~8,2%
set /a DD=%D% - 100
set /a MM=%M% - 100
set /a YY=%Y% - 100
set DT=%DD%.%MM%.%YY%
tr011_tmn
04-03-2009, 21:29
gora, только что проверил результат тот же
Неправильное число. Числовые константы должны быть десятичными (17)
шестнадцатеричными (0x11),или восьмеричными (021).
тем более используя:
set /a DD=%D% - 100
set /a MM=%M% - 100
получаем результаты
-96
-97
только что проверил результат тот же »Вы не внимательны. Не увидели 1 в строках: set D=1%date:~0,2% Скопируйте мой текст и ошибок не будет.
tr011_tmn
04-03-2009, 21:58
Вы не внимательны. Не увидели 1 в строках: set D=1%date:~0,2% Скопируйте мой текст и ошибок не будет. »
приношу свои извинения и огромную благодарность.
не могли бы вы уточнить что означает 1 перед %%? исключительно ради любопытства. ведь если я правильно понял то мы добавляем знак перед %% и получаем значение 1%%. при %Y%, это 12009, или я что то не так понял?
что означает 1 перед %% »Единица просто "приклеивается" спереди к переменной (не путать с математическим сложением). set D=1%date:~0,2% Если в %date:~0,2% имеем 04, то в переменной %D% будет 104.
Отнекрофилю тему :)
Давно уже собирался написать, но только, вот, руки дошли.
Чутка облагородить бы надо код:
REM Code by Herbert Kleebauer
(
Echo Bj@jzh`0X-`/PPPPPPa(DE(DM(DO(Dh(Ls(Lu(LX(LeZRR]EEEUYRX2Dx=
Echo 0DxFP,0Xx.t0P,=XtGsB4o@$?PIyU WwX0GwUY Wv;ovBX2Gv0ExGIuht6
Echo LisqMz`wGH@wKuur`G@w?ogBgGG}G?j_egoNOG?w?`gBLksqgG`w?WgBgG
Echo G}G?R_MgoNMy?wSx@W?s?W?@zAB`LrFuBLyt~vuco{@LuKooD?BFHqrIcP
Echo _sdDxb1T??=?rILO_sdDqx1T??=?rILO_sdDnl1T??=?rILO_sdD`c1T??
Echo =?rILO_sdDgg1T??=?rILO_sdDll1T??=?rILO_sdDrr1T??=??IL?0xxx
)>d_t.com
Именно REM, а не :: - вредно привыкать к неправильностям.
Глюки когда-нибудь вылезут из-за :: - застрелишься искать и догадываться :)
Присоветую еще заиметь папочку %SystemRoot%\_Add, которую указать в %Path%, и складывать в нее такие вот вкусняшки.
Тогда не надо будет создавать-удалять при каждом вызове. Как-то коряво это...
.
tarakan1983
24-12-2018, 18:21
gora,
Может пригодится.
Важно: создаваемый батником файл d_t.com является 16-разрядным приложением и не сможет работать на х64 ОС.
А кто-нибудь что-то подобное для Х64 знает?
А кто-нибудь что-то подобное для Х64 знает? »
И для x86, и для x64:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq skip=1 delims=" %%i in (
`wmic.exe OS get LocalDateTime`
) do for /f "tokens=1" %%j in ("%%~i") do (
set sDateTime=%%j
set sYear=!sDateTime:~0,4!
set sMonth=!sDateTime:~4,2!
set sDay=!sDateTime:~6,2!
set sHour=!sDateTime:~8,2!
set sMinute=!sDateTime:~10,2!
set sSecond=!sDateTime:~12,2!
)
echo Year: %sYear%
echo Month: %sMonth%
echo Day: %sDay%
echo Hour: %sHour%
echo Minute: %sMinute%
echo Second: %sSecond%
endlocal
exit /b 0
megaloman
24-12-2018, 19:51
@Echo Off
cls
FOR /F "tokens=2 delims==." %%d in ('WMIC OS GET LOCALDATETIME /VALUE') DO SET "sDateTime=%%d"
set "sYear=%sDateTime:~0,4%"
set "sMonth=%sDateTime:~4,2%"
set "sDay=%sDateTime:~6,2%"
set "sHour=%sDateTime:~8,2%"
set "sMinute=%sDateTime:~10,2%"
set "sSecond=%sDateTime:~12,2%"
echo Year: %sYear%
echo Month: %sMonth%
echo Day: %sDay%
echo Hour: %sHour%
echo Minute: %sMinute%
echo Second: %sSecond%
exit /b 0
@echo off
for /f "tokens=1* delims==" %%a in ('"wmic path win32_localtime get Day,Month,Year,Hour,Minute,Second /value|find "^=""') do set "%%a=0%%b"
echo Year: %Year:~-5%
echo Month: %Month:~-3%
echo Day: %Day:~-3%
echo Hour: %Hour:~-3%
echo Minute: %Minute:~-3%
echo Second: %Second:~-3%
pause
(учтено добавление ведущего нуля на всякий случай кому вдруг надо)
Утилита 156364 (38.5 КБ) из комплекта UnxUtils
позволяет получить данные о дате времени в любом формате
независимо от региональных настроек.
Примеры использования:
Показать текущие ГГГГ-ММ-ДД
date.exe +"%%Y-%%m-%%d"
(%%y (строчная) - Краткий двузначный формат года)
Записать дату/время в переменную в нужном формате
for /f "tokens=*" %%i in ('date.exe +"%%Y-%%m-%%d %%H:%%M:%%S"') do set timestamp=%%i
echo %timestamp%
Записать текущие значения даты/времени в переменные
for /f "tokens=1,2,3,4,5,6* delims=," %%i in (
'date.exe +"%%Y,%%m,%%d,%%H,%%M,%%S"') do (
set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n)
echo %yy% %mo% %dd%
Записать значения даты/времени файла в переменные
for /f "tokens=1,2,3,4,5,6* delims=," %%i in (
'date.exe -r test.txt +"%%Y,%%m,%%d,%%H,%%M,%%S"') do (
set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n)
echo %yy% %mo% %dd%
[+] Для сравнения значений переменных месяца, дня и т.д. необходимо удалить ведущие нули
for %%V in (%%m %%d) do (set /a %%V=1!%%V!-100)
Теперь не будет возникать ошибок при мат. операциях (set /a=...) с этими переменными
fhrbc, для получения даты/времени в едином формате у нас уже есть Wbem (wmic.exe).
для получения даты/времени в едином формате »
есть ещё интересные варианты... помимо wmic :)
Код не совсем мой, откуда стырена идея, уже не помню, но работает почти на всех windows:
@echo off
rem получаем дату в формате не зависящем от версии ОС
echo.>"%temp%\~.ddf"
>nul makecab /d RptFileName="%temp%\~.rpt" /d InfFileName="%temp%\~.inf" -f "%temp%\~.ddf"
for /f "tokens=4,5,6,7,8,9 delims=: " %%a in ('type "%temp%\~.rpt"') do (
if not defined m call :month %%a
if not defined current-date (call set "current-date=%%f-%%m%%-%%b")
if not defined current-time (call set "current-time=%%c:%%d:%%e")
)
del /q "%temp%\~.*"
echo. "%current-date%" "%current-time%"
pause&exit
rem перевод формата MMM -> MM
:month
if "%1"=="Jan" set "m=01"
if "%1"=="Feb" set "m=02"
if "%1"=="Mar" set "m=03"
if "%1"=="Apr" set "m=04"
if "%1"=="May" set "m=05"
if "%1"=="Jun" set "m=06"
if "%1"=="Jul" set "m=07"
if "%1"=="Aug" set "m=08"
if "%1"=="Sep" set "m=09"
if "%1"=="Oct" set "m=10"
if "%1"=="Nov" set "m=11"
if "%1"=="Dec" set "m=12"
exit /b
Все что угодно, лишь бы не изучать пошик
http://www.outsidethebox.ms/14845/#Get-Date
Все что угодно, лишь бы не изучать пошик »
это да, такое злобное поделие микрософт вообще ни в коем случае нельзя изучать, оно изменит все законы мироздания и Земля закрутится в другую сторону... :)
'{0:g.yyyy.MM.dd HH:mm:ss}' -f (get-date)
PS_5.1> '{0:g.yyyy.MM.dd HH:mm:ss}' -f (get-date)
наша эра.2019.02.05 22:20:19
PS_5.1> powershell -v 2.0
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
PS_2.0> '{0:g.yyyy.MM.dd HH:mm:ss}' -f (get-date)
A.D..2019.02.05 22:22:32
PS_2.0>
:)
YuS_2, а у меня на 5.1 и там, и там A.D. ;) (Windows 7 SP1 x64, CurrentCulture — 1049, ru-RU, Русский (Россия)):
PS C:\> powershell.exe -v 2.0
Windows PowerShell
(C) Корпорация Майкрософт, 2009. Все права защищены.
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
2 0 -1 -1
PS C:\> '{0:g.yyyy.MM.dd HH:mm:ss}' -f (Get-Date)
A.D..2019.02.05 20:06:09
PS C:\> exit
PS C:\> $PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
5 1 14409 1005
PS C:\> '{0:g.yyyy.MM.dd HH:mm:ss}' -f (Get-Date)
A.D..2019.02.05 20:06:23
PS C:\>
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.