Mos*_*sen 34 scripting cmd date
如何从Windows cmd脚本中获取当前的月份和年份?我需要将每个值都放入一个单独的变量中.
pok*_*oke 34
要获得年,月和日,您可以使用%date%环境变量和:~运算符. %date%扩展到Thu 08/12/2010之类的东西,并:~允许您从变量中选取特定字符:
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set filename=%year%_%month%_%day%
Run Code Online (Sandbox Code Playgroud)
%time%以类似的方式使用从当前时间获得您需要的东西.
set /? 将为您提供有关使用带变量的特殊运算符的更多信息.
asc*_*pfl 32
以下批处理代码以与语言环境无关的方式返回当前日期的组件,并将日,月和年分别存储在变量中CurrDay,CurrMonth并CurrYear分别:
for /F "skip=1 delims=" %%F in ('
wmic PATH Win32_LocalTime GET Day^,Month^,Year /FORMAT:TABLE
') do (
for /F "tokens=1-3" %%L in ("%%F") do (
set CurrDay=0%%L
set CurrMonth=0%%M
set CurrYear=%%N
)
)
set CurrDay=%CurrDay:~-2%
set CurrMonth=%CurrMonth:~-2%
echo Current day : %CurrDay%
echo Current month: %CurrMonth%
echo Current year :%CurrYear%
Run Code Online (Sandbox Code Playgroud)
有两个嵌套for /F循环可以解决wmic命令的问题,其输出采用unicode格式; 使用单个循环会导致额外的回车符,这会影响适当的变量扩展.
由于日期和月份也可能只包含一个数字,因此我0在循环结构中添加前导零.然后,将值修剪为始终由两位数组成.
And*_*dan 23
一种独立于区域设置的脚本变体.将其放在扩展名为.cmd的文本文件中并运行.
::: Begin set date
for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do (call :set_date %%i %%j %%k %%l)
goto :end_set_date
:set_date
if "%1:~0,1%" gtr "9" shift
for /f "skip=1 tokens=2-4 delims=(-)" %%m in ('echo,^|date') do (set %%m=%1&set %%n=%2&set %%o=%3)
goto :eof
:end_set_date
::: End set date
echo day in 'DD' format is %dd%; month in 'MM' format is %mm%; year in 'YYYY' format is %yy%
Run Code Online (Sandbox Code Playgroud)
变量%dd%,%mm%和%yy%将分别保留日('DD'格式),月('MM'格式)和年('YYYY'格式).
Ash*_*raf 13
echo %Date:~7,2% gets current day
Run Code Online (Sandbox Code Playgroud)
7是开始位置2要显示的位数
echo %Date:~7,2% gets current day
echo %Date:~4,2% gets current month
echo %Date:~10,4% gets current year
Run Code Online (Sandbox Code Playgroud)
语言独立性:
Andrei Coscodan解决方案依赖于语言,因此尝试修复它的方法是为每个字段保留所有标记:年,月和日目标语言.考虑到葡萄牙语和英语,在解析后做最终设置为:
set Year=%yy%%aa%
set Month=%mm%
set Day=%dd%
Run Code Online (Sandbox Code Playgroud)
寻找年份设置,我使用了英语和葡萄牙语的两个标签,它在巴西有用,我们在Windows instalations中最常见这两种语言.我希望这也适用于拉丁语的一些语言,如法语,西班牙语等.
好吧,完整的脚本可能是:
@echo off
setlocal enabledelayedexpansion
:: Extract date fields - language dependent
for /f "tokens=1-4 delims=/-. " %%i in ('date /t') do (
set v1=%%i& set v2=%%j& set v3=%%k
if "%%i:~0,1%%" gtr "9" (set v1=%%j& set v2=%%k& set v3=%%l)
for /f "skip=1 tokens=2-4 delims=(-)" %%m in ('echo.^|date') do (
set %%m=!v1!& set %%n=!v2!& set %%o=!v3!
)
)
:: Final set for language independency (English and Portuguese - maybe works for Spanish and French)
set year=%yy%%aa%
set month=%mm%
set day=%dd%
:: Testing
echo Year:[%year%] - month:[%month%] - day:[%day%]
endlocal
pause
Run Code Online (Sandbox Code Playgroud)
我希望这有助于处理不同语言的人.
我所知道的唯一可靠方法是使用VBScript为您完成繁重的工作.没有便携式方法可以使用批处理文件以可用格式获取当前日期.以下VBScript文件
Wscript.Echo("set Year=" & DatePart("yyyy", Date))
Wscript.Echo("set Month=" & DatePart("m", Date))
Wscript.Echo("set Day=" & DatePart("d", Date))
Run Code Online (Sandbox Code Playgroud)
和这个批处理片段
for /f "delims=" %%x in ('cscript /nologo date.vbs') do %%x
echo %Year%-%Month%-%Day%
Run Code Online (Sandbox Code Playgroud)
应该工作.
虽然您可以使用其中一个date /t或%date%伪变量在批处理文件中获取当前日期,但它们都会在它们显示的内容中跟随当前区域设置.这意味着您可能以任何格式获取日期,而您无法解析该日期.
此变体适用于所有本地化:
@echo off
FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
if "%%B" NEQ "" (
SET /A FDATE=%%F*10000+%%D*100+%%A
)
)
@echo on
echo date=%FDATE%
echo year=%FDATE:~2,2%
echo month=%FDATE:~4,2%
Run Code Online (Sandbox Code Playgroud)