Update: Sekarang bahwa itu's 2016 I'a menggunakan PowerShell untuk ini kecuali ada's benar-benar menarik mundur-kompatibel alasan untuk itu, terutama karena daerah pengaturan masalah dengan menggunakan upload
. Lihat @npocmaka's https://stackoverflow.com/a/19799236/8479
Apa's Windows command line pernyataan(s) yang bisa saya gunakan untuk mendapatkan arus datetime dalam format yang saya dapat dimasukkan ke dalam sebuah file?
Aku ingin memiliki .bat file yang zip direktori ke arsip dengan tanggal dan waktu saat ini sebagai bagian dari nama, misalnya, Code_2008-10-14_2257.zip
. Apakah ada cara mudah yang bisa saya lakukan ini, independen dari pengaturan regional mesin?
Saya don't benar-benar pikiran tentang format tanggal, idealnya itu'd menjadi yyyy-mm-dd, tapi sesuatu yang sederhana adalah yang baik-baik saja.
Sejauh ini saya've punya ini, yang pada mesin saya memberi saya Tue_10_14_2008_230050_91
:
rem Get the datetime in a format that can go in a filename.
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%
rem Now use the timestamp by in a new ZIP file name.
"d:\Program Files\7-Zip\7z.exe" a -r Code_%_my_datetime%.zip Code
Aku bisa hidup dengan ini, tapi tampaknya sedikit kikuk. Idealnya'd menjadi singkat dan memiliki format yang disebutkan sebelumnya.
I'm menggunakan Windows Server 2003 dan Windows XP Profesional. Saya don't ingin menginstal utilitas tambahan untuk mencapai hal ini (meskipun saya menyadari ada beberapa yang akan dilakukan tanggal bagus format).
Melihat Windows Batch File (.bat) untuk mendapatkan tanggal saat ini di MMDDYYYY format:
@echo off
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime%
Jika anda memilih waktu dalam 24 jam/militer format, anda bisa mengganti kedua UNTUK baris ini:
For /f "tokens=1-2 delims=/:" %%a in ("%TIME%") do (set mytime=%%a%%b)
C:> .\tanggal.bat
2008-10-14_0642
Jika anda ingin upload secara independen dari wilayah hari/bulan order, anda dapat menggunakan "WMIC os MENDAPATKAN LocalDateTime" sebagai sumber, karena itu's dalam ISO order:
@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 ldt=%ldt:~0,4%-%ldt:~4,2%-%ldt:~6,2% %ldt:~8,2%:%ldt:~10,2%:%ldt:~12,6%
echo Local date is [%ldt%]
C:>tes.cmd
Lokal tanggal [2012-06-19 10:23:47.048]
Output format %TANGGAL%
dan dir
perintah regional tergantung dan dengan demikian tidak kuat atau pintar. date.exe (bagian dari UnxUtils) memberikan setiap informasi tanggal dan waktu dalam setiap masuk akal format. Anda juga dapat mengekstrak informasi tanggal dari setiap file dengan date.exe
.
date.exe +"%T"
18:55:03
date.exe +"%Y%m%d %H%M%S: teks"
20091222 185503: teks
date.exe +"Text: %y/%m/%d-teks-%H%M"
Teks: 09/12/22-teks-18.55
Perintah: date.exe +"%m-%d """%H %M %S """"
07-22 "18:55:03"`
Tanggal/waktu informasi dari file referensi:
date.exe -r c:\file.txt +"timestamp file.txt adalah: %Y-%m-%d %H:%M:%S"
Menggunakan ini di CMD script untuk mendapatkan tahun, bulan, hari, waktu informasi:
for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n
Menggunakannya dalam script CMD untuk mendapatkan timestamp dalam setiap format yang diperlukan:
for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe +"%%y-%%m-%%d %%H:%%M:%%S"') do set timestamp=%%i
Penggalian informasi tanggal dari setiap file referensi.
for /f "tokens=1,2,3,4,5,6* delims=," %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y,%%m,%%d,%%H,%%M,%%S"') do set yy=%%i& set mo=%%j& set dd=%%k& set hh=%%l& set mm=%%m& set ss=%%n
Menambahkan ke file tanggal/waktu informasi:
for /f "tokens=*" %%i in ('C:\Tools\etc\date.exe -r file.txt +"%%y-%%m-%%d.%%H%%M%%S"') do ren file.txt file.%%i.txt
date.exe adalah bagian bebas GNU tools yang tidak memerlukan instalasi.
CATATAN: Menyalin date.exe
ke direktori yang di cari jalan dapat menyebabkan skrip lain untuk gagal yang menggunakan Windows built-in tanggal
perintah.
Dua cara yang tidak tergantung pada pengaturan waktu (baik yang diambil dari :Cara mendapatkan data/waktu independen dari lokalisasi:). Dan kedua juga mendapatkan hari minggu dan tidak satupun dari mereka membutuhkan izin admin!:
.bat
). JScript tersedia pada setiap bentuk sistem NT dan di atas, sebagai bagian dari Windows Script Host (meskipun dapat dinonaktifkan melalui registry itu's sebuah kasus yang jarang terjadi):
@if (@X)==(@Y) @end / ---tidak Berbahaya hybrid baris yang dimulai JScript komentar
@echo off
cscript //E:JScript //nologo "%~f0"
keluar /b 0
------------------------------------------------------------------------------*/
fungsi GetCurrentDate() {
// Hari ini tanggal waktu yang akan digunakan untuk ditetapkan sebagai default saat ini.
var todayDate = new Date();
todayDate = todayDate.getFullYear() + "-" +
("0" + (todayDate.getMonth() + 1)).slice(-2) + "-" +
("0" + todayDate.getDate()).slice(-2) + ", " + ("0" + todayDate.getHours()).slice(-2) + ":" +
("0" + todayDate.getMinutes()).slice(-2);
kembali todayDate;
}
WScript.Echo(GetCurrentDate()); Berikut ini's merupakan varian dari alt.msdos.batch.nt yang bekerja lokal secara mandiri.
Menempatkan ini dalam sebuah file teks, misalnya getDate.cmd
-----------8<------8<------------ snip -- snip ----------8<-------------
:: Works on any NT/2k machine independent of regional date settings
@ECHO off
SETLOCAL ENABLEEXTENSIONS
if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
set '%%a'=%%i
set '%%b'=%%j
set '%%c'=%%k))
if %'yy'% LSS 100 set 'yy'=20%'yy'%
set Today=%'yy'%-%'mm'%-%'dd'%
ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%
ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]
:EOF
-----------8<------8<------------ snip -- snip ----------8<-------------
Untuk mendapatkan kode untuk bekerja sans error msg's ke stderr, saya harus menambahkan tanda kutip tunggal terkait lainnya di dunia variabel tugas untuk %%a, %%b %%c. Saya lokal (PT) menyebabkan kesalahan pada satu tahap dalam perulangan/parsing di mana hal-hal seperti "set =20" mulai dieksekusi. Mengutip hasil sebuah token (meskipun kosong) untuk sisi kiri dari penugasan pernyataan.
The downside adalah berantakan lokal nama-nama variabel: 'yy', 'mm' dan 'dd'. Tapi hei, siapa yang peduli!
Sayangnya hal ini tidak kebal terhadap pengaturan regional, tapi itu tidak apa yang anda inginkan.
set hour=%time:~0,2%
if "%time:~0,1%"==" " set hour=0%time:~1,1%
set _my_datetime=%date:~10,4%-%date:~4,2%-%date:~7,2%_%hour%%time:~3,2%
Menakjubkan hal-hal yang anda dapat menemukan di Wikipedia.
Pertama empat baris kode ini akan memberikan anda handal YY DD MM YYYY HH Min Sec variabel di Windows XP Professional dan lebih tinggi.
@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"
set "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%" & set "fullstamp=%YYYY%-%MM%-%DD%_%HH%%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"
pause
Cara lain (kredit):
@For /F "tokens=2,3,4 delims=/ " %%A in ('Date /t') do @(
Set Month=%%A
Set Day=%%B
Set Year=%%C
)
@echo DAY = %Day%
@echo Month = %Month%
@echo Year = %Year%
Perhatikan bahwa kedua jawaban saya di sini masih bergantung pada urutan hari dan bulan sebagaimana ditentukan oleh pengaturan regional - tidak yakin bagaimana untuk bekerja di sekitar itu.
Ini isn't benar-benar singkat tapi mungkin cara yang lebih fleksibel (kredit):
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET date=%mm%%dd%%yyyy%
Berikut ini's cara untuk mendapatkan tanggal waktu dalam satu baris:
for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %a in ('%date% %time%') do echo %c-%a-%b %d%e
Di AS ini akan output "yyyy-mm-dd hhmm". Pengaturan regional yang berbeda akan menghasilkan hasil yang berbeda %tanggal% output, tetapi anda dapat mengubah urutan token.
Jika anda ingin format yang berbeda, memodifikasi echo pernyataan dengan menata ulang token atau menggunakan berbeda (atau tidak ada) pemisah.
Jawaban singkat :
:: Start - Run , type:
cmd /c "powershell get-date -format ^"{yyyy-MM-dd HH:mm:ss}^"|clip"
:: click into target media, Ctrl + V to paste the result
Jawaban panjang
@echo off
:: START USAGE ==================================================================
::SET THE NICETIME
:: SET NICETIME=BOO
:: CALL GetNiceTime.cmd
:: ECHO NICETIME IS %NICETIME%
:: echo nice time is %NICETIME%
:: END USAGE ==================================================================
echo set hhmmsss
:: this is Regional settings dependant so tweak this according your current settings
for /f "tokens=1-3 delims=:" %%a in ('echo %time%') do set hhmmsss=%%a%%b%%c
::DEBUG ECHO hhmmsss IS %hhmmsss%
::DEBUG PAUSE
echo %yyyymmdd%
:: this is Regional settings dependant so tweak this according your current settings
for /f "tokens=1-3 delims=." %%D in ('echo %DATE%') do set yyyymmdd=%%F%%E%%D
::DEBUG ECHO yyyymmdd IS %yyyymmdd%
::DEBUG PAUSE
set NICETIME=%yyyymmdd%_%hhmmsss%
::DEBUG echo THE NICETIME IS %NICETIME%
::DEBUG PAUSE
Dan di sini adalah sama batch-file untuk bagian waktu.
:: http://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional time settings
::
:: Gets the time in ISO 8601 24-hour format
::
:: Note that %time% gets you fractions of seconds, and time /t doesn't, but gets you AM/PM if your locale supports that.
:: Since ISO 8601 does not care about AM/PM, we use %time%
::
@ECHO off
SETLOCAL ENABLEEXTENSIONS
for /f "tokens=1-4 delims=:,.-/ " %%i in ('echo %time%') do (
set 'hh'=%%i
set 'mm'=%%j
set 'ss'=%%k
set 'ff'=%%l)
ENDLOCAL & SET v_Hour=%'hh'%& SET v_Minute=%'mm'%& SET v_Second=%'ss'%& SET v_Fraction=%'ff'%
ECHO Now is Hour: [%V_Hour%] Minute: [%V_Minute%] Second: [%v_Second%] Fraction: [%v_Fraction%]
set timestring=%V_Hour%%V_Minute%%v_Second%.%v_Fraction%
echo %timestring%
:EOF
--jeroen
Aku berubah jawaban dengan batch file dari vMax sehingga bekerja dengan bahasa belanda juga.
Belanda terus-menerus seperti kita - memiliki beberapa perubahan di %tanggal%
, upload/t
, dan tanggal
yang melanggar asli batch-file.
Akan lebih baik jika beberapa orang dapat memeriksa ini lain terhadap Windows terkenal juga, dan melaporkan kembali hasil.
Jika batch-file yang gagal di lokasi anda, maka harap sertakan output dari kedua pernyataan di command prompt:
echo:^|tanggal
tanggal/t
Ini adalah contoh dari output yang harus anda dapatkan dari batch file:
C:\temp>set-date-cmd.bat
Today is Year: [2011] Month: [01] Day: [03]
20110103
Berikut ini adalah kode revisi dengan komentar di mengapa:
:: https://stackoverflow.com/questions/203090/how-to-get-current-datetime-on-windows-command-line-in-a-suitable-format-for-usi
:: Works on any NT/2k machine independent of regional date settings
::
:: 20110103 - adapted by [email protected] for Dutch locale
:: Dutch will get jj as year from echo:^|date, so the '%%c' trick does not work as it will fill 'jj', but we want 'yy'
:: luckily, all countries seem to have year at the end: http://en.wikipedia.org/wiki/Calendar_date
:: set '%%c'=%%k
:: set 'yy'=%%k
::
:: In addition, date will display the current date before the input prompt using dashes
:: in Dutch, but using slashes in English, so there will be two occurances of the outer loop in Dutch
:: and one occurence in English.
:: This skips the first iteration:
:: if "%%a" GEQ "A"
::
:: echo:^|date
:: Huidige datum: ma 03-01-2011
:: Voer de nieuwe datum in: (dd-mm-jj)
:: The current date is: Mon 01/03/2011
:: Enter the new date: (mm-dd-yy)
::
:: date/t
:: ma 03-01-2011
:: Mon 01/03/2011
::
:: The assumption in this batch-file is that echo:^|date will return the date format
:: using either mm and dd or dd and mm in the first two valid tokens on the second line, and the year as the last token.
::
:: The outer loop will get the right tokens, the inner loop assigns the variables depending on the tokens.
:: That will resolve the order of the tokens.
::
@ECHO off
set v_day=
set v_month=
set v_year=
SETLOCAL ENABLEEXTENSIONS
if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
::DEBUG echo toks=%toks%
for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
::DEBUG echo first token=%%a
if "%%a" GEQ "A" (
for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
set '%%a'=%%i
set '%%b'=%%j
set 'yy'=%%k
)
)
)
if %'yy'% LSS 100 set 'yy'=20%'yy'%
set Today=%'yy'%-%'mm'%-%'dd'%
ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%
ECHO Today is Year: [%V_Year%] Month: [%V_Month%] Day: [%V_Day%]
set datestring=%V_Year%%V_Month%%V_Day%
echo %datestring%
:EOF
--jeroen
Matthew Johnson's satu-liner solusi untuk mendapatkan one-liner tanggal dan waktu fasih dan berguna.
Namun itu tidak perlu modifikasi sederhana untuk bekerja dari dalam file batch:
for /f "tokens=2,3,4,5,6 usebackq delims=:/ " %%a in ('%date% %time%') do echo %%c-%%a-%%b %%d%%e
Fungsi yang didasarkan pada wmic
:
:Now -- Gets the current date and time into separate variables
:: %~1: [out] Year
:: %~2: [out] Month
:: %~3: [out] Day
:: %~4: [out] Hour
:: %~5: [out] Minute
:: %~6: [out] Second
setlocal
for /f %%t in ('wmic os get LocalDateTime ^| findstr /b [0-9]') do set T=%%t
endlocal & (
if "%~1" neq "" set %~1=%T:~0,4%
if "%~2" neq "" set %~2=%T:~4,2%
if "%~3" neq "" set %~3=%T:~6,2%
if "%~4" neq "" set %~4=%T:~8,2%
if "%~5" neq "" set %~5=%T:~10,2%
if "%~6" neq "" set %~6=%T:~12,2%
)
goto:eof
Terbalik: Wilayah independen. Kelemahan: Hanya administrator sistem dapat berjalan wmic.exe.
Penggunaan:
call:Now Y M D H N S
echo %Y%-%M%-%D% %H%:%N%:%S%
Ini echos string seperti ini:
2014-01-22 12:51:53
Perhatikan bahwa fungsi parameter adalah Parameter keluar - yaitu, anda harus menyediakan nama-nama variabel, bukan nilai-nilai.
Semua parameter bersifat opsional, jadi panggilan:Sekarang Y M
adalah valid panggilan jika anda hanya ingin mendapatkan tahun dan bulan.
Ini adalah apa yang saya've digunakan:
::Date Variables - replace characters that are not legal as part of filesystem file names (to produce name like "backup_04.15.08.7z")
SET DT=%date%
SET DT=%DT:/=.%
SET DT=%DT:-=.%
Jika anda ingin lebih ide-ide untuk mengotomatisasi backup ke 7-Zip arsip, saya memiliki free/open project anda dapat menggunakan atau review untuk ide-ide: http://wittman.org/ziparcy/
Saya punya masalah yang sama. Saya yang setiap hari otomatis di-download dari FTP server dari file yang dienkripsi. Saya ingin mendekripsi file menggunakan gpg, mengubah nama file ke tanggal saat ini (format YYYYMMDD) dan drop dekripsi file ke dalam folder untuk departemen yang benar.
Aku pergi melalui beberapa saran untuk mengganti nama file menurut tanggal dan sedang tidak beruntung sampai aku tersandung pada solusi sederhana ini.
for /f "tokens=1-5 delims=/ " %%d in ("%date%") do rename "decrypted.txt" %%g-%%e-%%f.txt
Itu bekerja dengan sempurna (yaitu, nama yang keluar sebagai "2011-06-14.txt").