[英]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 Instrumentation是http://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+1300
和2019-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.