如何從Windows cmd腳本中獲取當天的月份和年份?我需要將每個值都變成一個單獨的變量。如何從Windows cmd.exe腳本獲取當天的月份和年份?
回答
工作區域獨立的腳本的變體。把它放在一個擴展名爲.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%
變量%DD%,%毫米%和%YY%,將分別保持一天( 'DD' 格式),月( 'MM' 格式),並在今年( 'YYYY' 格式)。
還沒有測試過這個,但我懷疑它也是高度依賴本地化的。 – BrainSlugs83 2011-09-22 20:56:05
+1,我喜歡這個解決方案,因爲它適用於Windows XP和Windows7,其中'date/t'分別返回爲'11/02/2011'和'Wed 11/02/2011'。 – JeffJak 2011-11-02 15:19:55
它不適用於俄語區域! 而不是(dd mm yy) – vitperov 2017-07-06 12:50:44
我知道的唯一可靠的方法是使用VBScript爲你做繁重的工作。沒有一種便攜的方式可以單獨使用批處理文件以可用格式獲取當前日期。下面的VBScript文件
Wscript.Echo("set Year=" & DatePart("yyyy", Date))
Wscript.Echo("set Month=" & DatePart("m", Date))
Wscript.Echo("set Day=" & DatePart("d", Date))
和這批片斷
for /f "delims=" %%x in ('cscript /nologo date.vbs') do %%x
echo %Year%-%Month%-%Day%
應該工作,雖然。
雖然您可以使用date /t
或%date%
僞變量獲取批處理文件中的當前日期,但它們都按照當前顯示的區域設置顯示。這意味着您可能獲得格式的任何格式的日期,並且您無法解析該格式。
要獲得年,月和日,您可以使用%date%
環境變量和:~
運算符。 %date%
擴展到像週四08/12/2010和:~
讓你拿起特定字符,變量的:
set year=%date:~10,4%
set month=%date:~4,2%
set day=%date:~7,2%
set filename=%year%_%month%_%day%
使用%time%
以類似的方式,讓你從當前時間所需要的。
set /?
會給你更多關於使用特殊操作變量的信息。
這看起來很依賴於本地化。 – BrainSlugs83 2011-09-22 20:53:11
我認爲Andrei Coscodan的答案是最好的,當你無法做出很多假設時。但是,如果你可以做出一些假設,有時會有一個單行。此解決方案假定'date \ t'將返回兩種格式之一。在WindowsXP'date/t'返回「11/23/2011」,但在Windows7上它返回「Wed 11/23/2011」。
FOR /f "tokens=1-4 delims=/ " %%a in ('date /t') do (set mm=%%a&set dd=%%b&set yyyy=%%c& (if "%%a:~0,1" gtr "9" set mm=%%b&setdd=%%c&set yyyy=%%d))
:: Test results
echo day in 'DD' format is '%dd%'; month in 'MM' format is '%mm%'; year in 'YYYY' format is '%yyyy%'
感謝Andrei Consodan回答幫助我解決這個單線問題。
語言獨立性:
的安德烈Coscodan解決方案依賴於語言,這樣的方式來嘗試修復它是保留所有的每個字段標籤:年,月,日的目標語言。考慮葡萄牙語和英語,解析後做最後一組爲:
set Year=%yy%%aa%
set Month=%mm%
set Day=%dd%
查找當年的設置,我用英語和葡萄牙語兩種標籤,它在巴西的工作對我來說,我們有這兩種語言的在Windows安裝中最常見。我預計這也適用於一些拉丁文語言的語言,如法語,西班牙語等。
那麼,完整的腳本可能是:
@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
我希望這可以幫助別人,與diferent語言處理。
powershell Set-Date -Da (Get-Date -Y 1980 -Mon 11 -Day 17)
echo %Date:~7,2% gets current day
7開始位置 2的位數以顯示
echo %Date:~7,2% gets current day
echo %Date:~4,2% gets current month
echo %Date:~10,4% gets current year
非常好,功能強大的語法,謝謝分享。在我不得不使用它的情況下,這是最簡單和最清晰的解決方案。 – 2016-07-20 12:06:37
不錯,但地方依賴。 – mattpm 2016-09-25 01:56:09
如果'echo%Date%'輸出日期爲'dd/mm/yyyy'(如'12/05/2017'),則上述代碼如果更改爲'%Date:〜0.2%','%日期:〜3,2%'和'%日期:〜6.4%'。思考Windows是如何設計的(或者可以設計的),使用一段簡單的代碼就可以實現地點獨立性。這對於Linux或Unix一般來說不是問題,但是... – 2017-05-12 12:26:33
下面的批處理代碼返回當前日期的組分在語言環境無關的方式並存儲日,月份和年份分別爲變量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%
有兩個嵌套的for /F
循環可解決輸出爲unicode格式的wmic
命令的問題;使用單個循環會產生額外的回車符,這會影響適當的變量擴展。
由於日期和月份也可能只包含一個數字,因此我在循環結構中預設了一個前導零0
。之後,將值修剪爲始終由兩位數組成。
適合我。 :)(德語) – Kurtibert 2016-03-06 13:13:58
適合我(中文)。謝謝! – TerrenceSun 2016-09-24 04:30:08
這種變異適用於所有本地化:
@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%
- 1. 獲取當前月份和當前年份的天數
- 2. 從python的年份月份獲取月份的最後一天
- 3. 如何在JAVA中從MySQL獲取當前年份和月份?
- 4. 如何獲取月份和年份的天數
- 5. 從SQL獲取年份和月份
- 6. VBA-獲取月份和年份從今天日期
- 7. 我必須從輸入的月份/年份打印月份和年份到當前的月份和年份
- 8. TDateTimePicker delphi獲取年份和月份
- 9. 獲取的天數從給定的年份和月份一個月EXCEL
- 10. 在android中獲取月份和年份?
- 11. Mysql - 獲取月份和年份#
- 12. Scala - 獲取選定年份的天數和月份列表
- 13. 如何從過去的月份到當月的月份和年份列表
- 14. 從FSCalender獲取當前月份和年份-Swift
- 15. 在30天內獲取行,當年是當前年份,月份是當前月份,日期是字符串
- 16. 從MYSQL獲取月份,年份CURRENT_TIMESTAMP
- 17. CURRENT_DATE獲取月份和年份
- 18. 獲取特定年份和月份
- 19. 如何從DatePickerDialog獲取日期,月份和年份?
- 20. 年數,月份和天數
- 21. 獲得年份和月份從要素
- 22. T-SQL:從月份列中合併當前年份和月份
- 23. 獲取所選月份和年份的第一天和最後一天?
- 24. 如何獲得當前的月份和年份
- 25. 如何計算當前月份/年份的天數
- 26. 如何獲得特定月份和年份的一個月的天數?
- 27. 如何從年份和月份中扣除月份
- 28. 如何獲得的第一天,從給定的年份和月份在SQL
- 29. 獲取特定年份的月份值
- 30. 從月到年和月份
http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a -suitable-format-for-usi – jwsample 2010-08-12 23:12:57
我不明白這應該如何工作。如果我在鏈接處執行腳本並打印結果,它只是給我Thu_08_12_2010_161902_52 – Mossen 2010-08-12 23:22:48