簡體   English   中英

批處理腳本日期到變量

[英]Batch script date into variable

for /F "tokens=1-4 delims=/ " %%i in ('date /t') do (
set Day=%%k
set Month=%%j
set Year=%%l
set DATE=%%k/%%j/%%l)

我試圖在批處理腳本中將日期輸入到上述變量中,但目前日期顯示為

2011/04/

對於如何解決這個問題,有任何的建議嗎?

您沒有得到預期的結果,因為%DATE%使用“短日期格式”的 Windows 設置返回當前日期。 此設置是完全(無限)可定制的。

一位用戶可以將其系統配置為將短日期顯示為 Fri040811; 而另一個用戶(即使在同一系統中)可能會選擇 08/04/2011。 這對 BAT 程序員來說完全是一場噩夢。

一種可能的解決方案是改用WMIC WMIC 是 WMI 的 WMI 命令行界面。 WMI Windows Management Instrumentationhttp://en.wikipedia.org/wiki/Windows_Management_Instrumentation

WMIC Path Win32_LocalTime Get Day,Hour,Minute,Month,Second,Year /Format:table

以方便的方式返回日期以直接使用FOR對其進行解析。

完成解析並將各個部分放在一起

 FOR /F "skip=1 tokens=1-6" %%A IN ('WMIC Path Win32_LocalTime Get Day^,Hour^,Minute^,Month^,Second^,Year /Format:table') DO (
    SET /A TODAY=%%F*10000+%%D*100+%%A
 )

我從已經給出的解決方案中得出了最短的。 這適用於每個系統(XP Pro 及更高版本):

REM ===================================================================
REM CREATE UNIQUE DATETIME STRING IN FORMAT YYYYMMDD-HHMMSS
REM ======================================================================
FOR /f %%a IN ('WMIC OS GET LocalDateTime ^| FIND "."') DO SET DTS=%%a
SET DateTime=%DTS:~0,8%-%DTS:~8,6%
REM ======================================================================

當然,您可以使用生成的字符串格式。

這就是我在 XP pro 機器和更高版本中使用的東西。 XP Home 沒有 wmic。

:: timestamp YYYYMMDD_HHMMSS
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set dt=%dt:~0,8%_%dt:~8,6%
echo %dt%
pause

和另一個

:: timestamp YYYY-MM-DD_HH-MM-SS
@echo off
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set dt=%%a
set dt=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
echo %dt%
pause

我想這就是你想要的:

@echo off
:MENU
CLS
for /f "delims=" %%a in ('wmic OS Get localdatetime  ^| find "."') do set xsukax=%%a
echo Year=%xsukax:~0,4%
echo Month=%xsukax:~4,2%
echo Day=%xsukax:~6,2%
echo hour=%xsukax:~8,2%
echo Minutes=%xsukax:~10,2%
echo seconds=%xsukax:~12,2%

pause
goto MENU

隨心所欲地使用它

:: Date in year, day, month format

FOR /f "tokens=2-4 skip=1 delims=(-)" %%G IN ('echo.^|date') DO (
    FOR /f "tokens=2 delims= " %%A IN ('date /t') DO (
        SET v_first=%%G
        SET v_second=%%H
        SET v_third=%%I
        SET v_all=%%A
        )
    )

SET %v_first%=%v_all:~0,2%
SET %v_second%=%v_all:~3,2%
SET %v_third%=%v_all:~6,4%
SET DATE2= %MM%_%DD%_%YY%
ECHO. The date is: %DATE2%

您不能簡單地使用以下 1 行來創建您的 var(使用任何 var 名稱)嗎?

set ymd=%date:~6,4%/%date:~0,2%/%date:~3,2%
for /f %%a in ('wmic os get localdatetime ^| find "."') do set dts=%%a
set ymd=%dts:~0,8%
set hour=%dts:~8,6%

以下腳本將以真正的 ISO8601 和人類格式(無“T”)提供帶有時區 (TZ) 信息的本地時間。 它將以分鍾為單位的 TZ 偏移量轉換為所需的 HHMM 格式,例如2019-01-25T08:26:55.347+13002019-01-25 08:26:55.347+1300用於帶有 DST 的 NZ。

@echo off
for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
set ccyy_mm_dd=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2%
set hh_mm_ss=%ldt:~8,2%:%ldt:~10,2%:%ldt:~12,2%
set _fff=%ldt:~14,4%
set tzsign=%ldt:~21,1%
set tzmins=%ldt:~22%
set /a tzHH=(%tzmins%/60)
set /a tzMM=(%tzmins%-(%tzHH%*60))
set /a tzHH=100 + %tzHH%
set tzHH=%tzHH:~1,2%
set /a tzMM=100 + %tzMM%
set tzMM=%tzMM:~1,2%
set ldt=%ccyy_mm_dd% %hh_mm_ss%%_fff%%tzsign%%tzHH%%tzMM%
set ldt8601=%ccyy_mm_dd%T%hh_mm_ss%%_fff%%tzsign%%tzHH%%tzMM%
echo %ldt%
echo %ldt8601%

您可能想刪除其中一個 echo 命令

編輯那些想要在 TZ 中使用冒號的人,將%tzHH%%tzMM%更改為%tzHH%:%tzMM%

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM