首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无论区域设置如何,批处理文件中的拆分%日期%

无论区域设置如何,批处理文件中的拆分%日期%
EN

Stack Overflow用户
提问于 2013-03-13 06:48:27
回答 10查看 18.3K关注 0票数 11

是否有一种方法可以在批处理文件中拆分%date% (例如,在3个环境变量中),但不考虑区域设置?今天的日期对我们来说是3/13/2013,但是使用我的区域设置,它是13.3.2013 -,分隔符被更改,顺序也是

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-03-13 06:59:32

您可以使用使用wmic (但XP Home中不包含WMIC ):

代码语言:javascript
复制
@ECHO OFF
:: Check WMIC is available
WMIC.EXE Alias /? >NUL 2>&1 || GOTO s_error

:: Use WMIC to retrieve date and time
FOR /F "skip=1 tokens=1-6" %%G IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
   IF "%%~L"=="" goto s_done
      Set _yyyy=%%L
      Set _mm=00%%J
      Set _dd=00%%G
      Set _hour=00%%H
      SET _minute=00%%I
)
:s_done

:: Pad digits with leading zeros
      Set _mm=%_mm:~-2%
      Set _dd=%_dd:~-2%
      Set _hour=%_hour:~-2%
      Set _minute=%_minute:~-2%

:: Display the date/time in ISO 8601 format:
Set _isodate=%_yyyy%-%_mm%-%_dd% %_hour%:%_minute%
Echo %_isodate%

GOTO:EOF

:s_error
Echo GetDate.cmd
Echo Displays date and time independent of OS Locale, Language or date format.
Echo Requires Windows XP Professional, Vista or Windows 7
Echo.
Echo Returns 6 environment variables containing isodate,Year,Month,Day,hour and minute.

您可以通过解析日期命令来查找当前日期格式所需的内容。

第一个链接表示您可能需要在第二个Win7上编辑代码,以处理短日期/长日期表单中的一些额外皱纹。

票数 4
EN

Stack Overflow用户

发布于 2017-08-29 12:55:58

四年过去了,但这个问题并没有过时,我认为现在有一个比使用wmic (在win7上继续使用)稍微好一点的答案。

代码语言:javascript
复制
for /F "tokens=1,2,3 delims=_" %%i in ('PowerShell -Command "& {Get-Date -format "MM_dd_yyyy"}"') do (
    set MONTH=%%i
    set DAY=%%j
    set YEAR=%%k
)
echo %MONTH% %DAY% %YEAR%

使用powershell Get-Date,您可以微调所需的格式(短、长、数字、名称等)。在本例中,"MM_dd_yyyy“将在单数月或日的情况下获得带前导零的数字日期。

票数 9
EN

Stack Overflow用户

发布于 2013-03-13 08:27:01

我已经修改了sashoalm的版本,以解决被压制的前导-零状态:

代码语言:javascript
复制
@Echo OFF
SETLOCAL
If "%Date%A" LSS "A" (Set _NumTok=1-3) Else (Set _NumTok=2-4)
:: Default Delimiter of TAB and Space are used
For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v iDate') Do Set _iDate=%%B
For /F "TOKENS=2*" %%A In ('REG QUERY "HKCU\Control Panel\International" /v sDate') Do Set _sDate=%%B
IF %_iDate%==0 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%H %%F %%G
IF %_iDate%==1 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%H %%G %%F
IF %_iDate%==2 For /F "TOKENS=%_NumTok% DELIMS=%_sdate% " %%F In ("%Date%") Do CALL :procdate %%F %%G %%H
endlocal&SET YYYYMMDD=%YYYYMMDD%
GOTO :eof

::
:: Date elements are supplied in Y,M,D order but may have a leading zero
::
:procdate
:: if single-digit day then 1%3 will be <100 else 2-digit
IF 1%3 LSS 100 (SET YYYYMMDD=0%3) ELSE (SET YYYYMMDD=%3)
:: if single-digit month then 1%2 will be <100 else 2-digit
IF 1%2 LSS 100 (SET YYYYMMDD=0%2%YYYYMMDD%) ELSE (SET YYYYMMDD=%2%YYYYMMDD%)
:: Similarly for the year - I've never seen a single-digit year
IF 1%1 LSS 100 (SET YYYYMMDD=20%YYYYMMDD%) ELSE (SET YYYYMMDD=%1%YYYYMMDD%)
GOTO :eof

按您的意愿返回YYYYMMDD子字符串。

有趣的是,在SETLOCAL之后插入

代码语言:javascript
复制
IF NOT "%1"=="" set date=%1

将允许将本地序列中的任何日期(没有日期名称)解码为YYYYMMDD (但请注意,与yy窗体一起提供的19 it个日期将显示为20 it如果有必要,很容易补偿)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15378719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档