Dalam skrip batch Windows (Windows XP) saya perlu memformat tanggal dan waktu saat ini untuk digunakan nanti dalam nama file, dll.
Ini mirip dengan pertanyaan Stack Overflow. Bagaimana cara menambahkan tanggal dalam file batch , tetapi dengan waktu juga.
Saya punya ini sejauh ini:
echo %DATE%
echo %TIME%
set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
echo %datetimef%
pemberian yang mana:
28/07/2009
8:35:31.01
2009_07_28__ 8_36_01
Apakah ada cara saya bisa mengizinkan satu digit jam dalam% TIME%, jadi saya bisa mendapatkan yang berikut?
2009_07_28__08_36_01
windows
datetime
formatting
batch-file
laurie
sumber
sumber
datetimef
variabel Anda , dan menempatkan 0 sebagai gantinya. Pada contoh Anda:SET datetimef=%datetimef: =0%
Jawaban:
Saya berakhir dengan skrip ini:
:: Pada WIN2008R2 misalnya saya harus membuat 'set bulan =% tanggal: ~ 3,2%' seperti di bawah ini :: jika tidak, 00 muncul untuk MONTH
sumber
sumber
Inilah cara saya menghasilkan nama file log (berdasarkan http://ss64.com/nt/syntax-getdate.html ):
sumber
Saya biasanya melakukannya dengan cara ini setiap kali saya membutuhkan string tanggal / waktu:
Ini untuk format tanggal / waktu Jerman (dd.mm.yyyy jj: mm: dd). Pada dasarnya saya menggabungkan substring dan akhirnya mengganti semua spasi dengan nol.
Penjelasan singkat tentang cara kerja substring:
Jadi untuk mendapatkan tahun dari tanggal seperti "29.03.2018" gunakan:
sumber
Jika PowerShell diinstal, maka Anda dapat dengan mudah dan andal mendapatkan Tanggal / Waktu dalam format apa pun yang Anda inginkan, misalnya:
Tentu saja saat ini PowerShell selalu diinstal, tetapi pada Windows XP Anda mungkin hanya ingin menggunakan teknik ini jika skrip batch Anda digunakan di lingkungan yang dikenal di mana Anda tahu PS tersedia (atau periksa file batch Anda jika PowerShell tersedia ...)
Anda mungkin bertanya: mengapa menggunakan file batch sama sekali jika Anda dapat menggunakan PowerShell untuk mendapatkan tanggal / waktu, tapi saya pikir beberapa alasan yang jelas adalah: (a) Anda tidak terlalu terbiasa dengan PowerShell dan masih lebih suka melakukan sebagian besar melakukan hal-hal kuno dengan file batch atau (b) Anda memperbarui skrip lama dan tidak ingin port semuanya untuk PS.
sumber
Saya menemukan masalah ini hari ini dan menyelesaikannya dengan:
Ini menggantikan spasi dengan 0s dan pada dasarnya nol-pad jam.
Setelah beberapa pencarian cepat saya tidak mengetahui apakah diperlukan ekstensi perintah (masih bekerja dengan SETLOCAL DISABLEEXTENSIONS).
sumber
:
)?echo %TIME: =:%
tetapi jika tidak mungkin mencoba melarikan diri:
dengan^
sejenisnyaecho %TIME: =^:%
(yang juga berfungsi untuk saya).Seperti yang telah dicatat, penguraian tanggal dan waktu hanya berguna jika Anda tahu format yang digunakan oleh pengguna saat ini (misalnya, MM / hh / tttt atau hh-MM-tttt hanya untuk menyebutkan dua). Ini bisa ditentukan, tetapi pada saat Anda melakukan semua stres dan parsing, Anda masih akan berakhir dengan beberapa situasi di mana ada format tak terduga yang digunakan, dan diperlukan lebih banyak tweak.
Anda juga dapat menggunakan beberapa program eksternal yang akan mengembalikan slug tanggal dalam format pilihan Anda, tetapi itu memiliki kekurangan karena perlu mendistribusikan program utilitas dengan skrip / batch Anda.
Ada juga trik batch menggunakan jam CMOS dengan cara yang cukup mentah, tapi itu terlalu dekat dengan kabel telanjang bagi kebanyakan orang, dan juga tidak selalu tempat yang disukai untuk mengambil tanggal / waktu.
Di bawah ini adalah solusi yang menghindari masalah di atas. Ya, ini memperkenalkan beberapa masalah lain, tetapi untuk tujuan saya, saya menemukan ini sebagai solusi termudah, paling jelas, paling portabel untuk membuat datestamp di file .bat untuk sistem Windows modern. Ini hanya sebuah contoh, tetapi saya pikir Anda akan melihat bagaimana mengubah format tanggal dan / atau waktu lainnya, dll.
sumber
reg query "HKCU\Control Panel\International" /v sShortDate
bagian tersebut tanpa mengubah pengaturan registri (latihan tersisa untuk pembaca!).Berikut ini mungkin bukan jawaban langsung tetapi jawaban yang dekat?
Setidaknya itu mungkin menginspirasi.
sumber
Jika Anda tidak benar-benar membutuhkan format ini:
Kemudian Anda dapat menggunakan 3 baris kode berikut yang menggunakan% date% dan% time%:
Catatan: Karakter
/
dan:
dihapus dan karakter.
dan ruang diganti dengan garis bawah.Contoh output (diambil Rabu 8/5/15 pada 12:49 PM dengan 50 detik dan 93 milidetik):
sumber
sumber
Itu
offset:length
pemformatan didukung denganSET
perintah pada Windows tidak akan memungkinkan Anda untuk pad0
seperti yang Anda tampaknya tertarik.Namun, Anda dapat mengkodekan skrip BATCH untuk memeriksa apakah waktunya kurang dari
10
dansesuai dengan
echo
string yang berbeda .Anda akan menemukan beberapa informasi di Internet
SET
perintah pada tautan ini .Anda juga dapat mengubah metode pemrograman lain untuk sampai ke sini.
Cukup sederhana di unix bash (tersedia dengan Cygwin di Windows) untuk hanya mengatakan,
Dan, selalu bantalan dengan benar.
sumber
Saya melakukannya dengan cara ini:
sumber
Baris pertama selalu menampilkan output dalam format ini dalam zona waktu:
20150515150941.077000 + 120
Ini membuat Anda hanya memformat output sesuai keinginan Anda.
sumber
File bat ini (save as datetimestr.bat) menghasilkan string datetime 3 kali: (1) string datetime panjang dengan hari dalam seminggu dan detik, (2) string datetime pendek tanpa mereka dan (3) versi pendek dari kode.
Untuk memberikan penghargaan yang tepat, saya menggabungkan konsep-konsep dari Peter Mortensen (18 Juni '14 pada 21:02) dan opello (25 Agustus '11 pada 14:27).
Anda dapat menulis ini jauh lebih pendek, tetapi versi panjang ini memudahkan membaca dan memahami kode.
sumber
Saya benar-benar baru dalam file batch dan ini adalah kode saya !! (Saya tidak yakin mengapa, tapi saya tidak bisa menggabungkan tanggal / t dan waktu / t bersama-sama dan saya tidak bisa menggunakan % date% dan % time% secara langsung tanpa variabel ...)
Ini semacam digunakan kembali dari orang lain (pertanyaannya adalah untuk mendapatkan batas waktu yang diformat untuk digunakan sebagai nama file).
sumber
Ada cara mudah lain untuk melakukannya:
sumber
Untuk menghasilkan
YYYY-MM-DD hh:mm:ss
cap waktu (24 jam) yang saya gunakan:sumber
%TIME%
dan%DATE%
variabel menggunakan format yang sama sepertiTIME
danDATE
perintah, masing-masing. Pada sistem saya, variabel tidak cocok dengan pengaturan regional saya.Script batch ini akan melakukan persis apa yang diinginkan OP (diuji pada Windows XP SP3).
Saya juga menggunakan trik registri pintar yang dijelaskan oleh "jph" sebelumnya yang IMHO adalah cara paling sederhana untuk mendapatkan 100% format konsisten tanggal
"yyyy_MM_dd"
pada sistem Windows baru atau lama. Perubahan ke satu nilai Registry untuk melakukan ini bersifat sementara sementara dan sepele; itu hanya berlangsung beberapa milidetik sebelum segera dikembalikan kembali.Klik dua kali file batch ini untuk demo instan, jendela Command Prompt akan muncul dan menampilkan stempel waktu Anda. . . . .
sumber
sumber
Buat file yang disebut "search_files.bat" dan tempatkan konten di bawah ini ke dalam file. Kemudian klik dua kali. Variabel% THH% sementara dibuat untuk menangani AM dengan tepat. Jika ada 0 dalam 2 digit pertama waktu, Windows mengabaikan sisa nama file dari file LOG.
sumber
Saya suka versi pendek di atas @The lorax, tetapi untuk pengaturan bahasa lain mungkin sedikit berbeda.
Misalnya, dalam pengaturan bahasa Jerman (dengan format tanggal alami: dd.mm.yyyy) kueri bulan harus diubah dari 4,2 menjadi 3,2:
sumber
Ini adalah 2 sen saya untuk
datetime string
. PadaMM DD YYYY
sistem beralih%DATE:~
entri pertama dan kedua .sumber
Saya mencoba jawaban yang diterima dan itu bekerja dengan cukup baik. Sayangnya Format Waktu AS tampaknya H: MM: SS.CS, dan 0 yang hilang di bagian depan menyebabkan masalah penguraian sebelum jam 10 pagi. Untuk mengatasi rintangan ini dan juga memungkinkan parsing sebagian besar format waktu dunia, saya datang dengan rutin sederhana ini yang tampaknya bekerja dengan sangat baik.
Yang menyenangkan dengan rutin ini adalah Anda melewatkan string waktu sebagai parameter pertama dan nama variabel lingkungan yang Anda inginkan untuk memuat waktu (dalam centidetik) sebagai parameter kedua. Sebagai contoh:
(* Chris *)
sumber
Mungkin kira-kira seperti ini:
sumber
Dalam situasi seperti ini, gunakan pendekatan pemrograman standar yang sederhana: Alih-alih mengeluarkan upaya besar untuk mem-parsing entitas yang tidak dikenal, cukup simpan konfigurasi saat ini, setel ulang ke status yang diketahui, ekstrak info dan kemudian kembalikan ke kondisi semula. Gunakan hanya sumber daya Windows standar.
Secara khusus, format tanggal dan waktu disimpan di bawah kunci registri HKCU \ Control Panel \ International \ dalam [definisi MS] "nilai": "sTimeFormat" dan "sShortDate". Reg adalah editor registri konsol yang disertakan dengan semua versi Windows. Hak istimewa yang ditingkatkan tidak diperlukan untuk memodifikasi kunci HKCU
Sederhana, mudah dan harus bekerja untuk semua wilayah.
Untuk alasan yang saya tidak mengerti, mengatur ulang nilai "sShortDate" segera berlaku di jendela konsol tetapi mengatur ulang nilai "sTimeFormat" yang sangat mirip TIDAK berlaku sebelum jendela konsol baru dibuka. Namun, satu-satunya hal yang dapat diubah adalah pembatas - posisi digitnya tetap. Demikian pula token waktu "HH" seharusnya menambah nol di awal tetapi tidak. Untungnya, penyelesaiannya mudah.
sumber
sTimeFormat
format waktu tidak berguna . Nggak. Karena memengaruhi prompt konsol berikutnya, terapkan menggunakanfor /f "delims=" %%G in ('cmd /C echo SET "DateTime=%%date%%__%%time%%"') do %%G
Skrip ini menggunakan antarmuka WMI yang diakses primer melalui alat WMIC, yang merupakan bagian integral dari Windows sejak Windows XP Professional (edisi Home juga didukung, tetapi alat ini tidak diinstal secara default). Script juga mengimplementasikan solusi alat WMIC yang hilang dengan membuat dan memanggil vbscript WSH untuk mengakses antarmuka WMI dan menulis ke konsol output waktu dengan format yang sama seperti alat WMIC menyediakan.
sumber
Trik single-line yang bagus untuk menghindari ekspansi variabel awal adalah menggunakan
cmd /c echo ^%time^%
sumber
sumber
Untuk solusi yang sangat sederhana untuk tanggal numerik untuk digunakan dalam nama file, gunakan kode berikut:
sumber
Bagi hasil perintah tanggal dengan garis miring, lalu Anda dapat memindahkan setiap token ke dalam variabel yang sesuai.
sumber