Bagaimana cara menyimpan tanggal saat ini dalam format YYYY-MM-DD ke dalam beberapa variabel di file Windows .bat?
Analog shell Unix:
today=`date +%F`
echo $today
windows
batch-file
Maksym Polshcha
sumber
sumber
Jawaban:
Anda bisa mendapatkan tanggal hari ini dengan cara lokal-agnostik menggunakan
Kemudian Anda dapat mengekstrak setiap bagian menggunakan substring:
Cara lain, di mana Anda mendapatkan variabel yang berisi bagian-bagian individual, adalah:
Jauh lebih bagus daripada mengutak-atik substring, dengan mengorbankan namespace variabel Anda.
Jika Anda membutuhkan UTC, bukan waktu lokal, perintahnya kurang lebih sama:
sumber
for /f
mengembalikan dua baris, yang terakhir kosong. Anda dapat menyelesaikannya dengan menggunakanset MyDate=
di antaranya. Saya rasa itulah yang tersandung oleh user2023861.Year
,Month
,Day
,Hour
,Minute
,Second
,Quarter
,WeekInMonth
,DayOfWeek
for /f %%x in ('wmic path win32_localtime get /format:list ^| findstr "="') do set %%x set today=%Year%-%Month%-%Day%
adalah jawaban yang tidak valid: mengembalikan satu digit bulan dan hari. Bagaimana cara mendapatkan bantalan kiri 2 digit dengan string nol bulan dan hari ke tanggal?Jika Anda ingin mencapai ini menggunakan perintah MS-DOS standar dalam file batch, maka Anda dapat menggunakan:
Saya yakin ini dapat ditingkatkan lebih jauh tetapi ini memberikan tanggal menjadi 3 variabel untuk Hari (hh), Bulan (mm) dan Tahun (yyyy). Anda kemudian dapat menggunakan ini nanti di skrip batch sesuai kebutuhan.
Meskipun saya memahami bahwa jawaban telah diterima untuk pertanyaan ini, metode alternatif ini dapat dihargai oleh banyak orang yang ingin mencapai ini tanpa menggunakan konsol WMI, jadi saya berharap ini menambah nilai pada pertanyaan ini.
sumber
Gunakan
date /T
untuk menemukan format pada command prompt.Jika format tanggal
Thu 17/03/2016
digunakan seperti ini:sumber
SELECT CONVERT(VARCHAR(16), GETDATE(), 112)
".%date:~10,4%%date:~7,2%%date:~4,2%T%time:~0,2%%time:~3,2%%time:~6,2%
Dua cara lagi yang tidak bergantung pada pengaturan waktu (keduanya diambil dari Cara mendapatkan data / waktu independen dari lokalisasi ). Dan keduanya juga mendapatkan hari dalam seminggu dan tidak ada yang memerlukan izin admin !:
MAKECAB - akan bekerja pada SETIAP sistem Windows (cepat, tetapi membuat file sementara kecil) (skrip foxidrive):
ROBOCOPY - ini bukan perintah asli untuk Windows XP dan Windows Server 2003 , tetapi dapat diunduh dari situs Microsoft . Tapi itu built-in dalam segala hal mulai dari Windows Vista dan yang lebih baru:
Dan tiga cara lagi yang menggunakan bahasa skrip Windows lainnya. Mereka akan memberi Anda lebih banyak fleksibilitas misalnya Anda bisa mendapatkan minggu dalam setahun, waktu dalam milidetik dan seterusnya.
JScript / BATCH hybrid (perlu disimpan sebagai
.bat
). JScript tersedia di setiap sistem dari Windows NT dan di atasnya, sebagai bagian dari Windows Script Host ( meskipun dapat dinonaktifkan melalui registri, ini jarang terjadi ):VBScript / BATCH hybrid ( Apakah mungkin untuk menyematkan dan mengeksekusi VBScript dalam file batch tanpa menggunakan file sementara? ) Kasus yang sama seperti jscript, tetapi hibridisasi tidak begitu sempurna:
PowerShell - dapat diinstal di setiap mesin yang memiliki .NET - unduh dari Microsoft ( v1 , v2 , dan v3 (hanya untuk Windows 7 dan yang lebih baru)). Diinstal secara default pada semua bentuk Windows 7 / Win2008 dan yang lebih baru:
Jscript.net/batch yang dikompilasi sendiri (Saya belum pernah melihat mesin Windows tanpa .NET jadi saya pikir ini cukup portabel):
Tukang tebang kayu Ini tidak bisa mendapatkan tahun dan hari dalam seminggu. Ini relatif lambat, juga membuat file temp dan didasarkan pada stempel waktu yang dimasukkan logman ke file log-nya. Akan bekerja dari Windows XP dan yang lebih baru. Ini mungkin tidak akan pernah digunakan oleh siapa pun - termasuk saya - tetapi itu satu cara lagi ...
Informasi lebih lanjut tentang fungsi Get-Date .
sumber
Saya sangat menyukai metode Joey, tetapi saya pikir saya akan mengembangkannya sedikit.
Dalam pendekatan ini, Anda dapat menjalankan kode beberapa kali dan tidak perlu khawatir tentang nilai tanggal lama yang "bertahan" karena sudah ditentukan.
Setiap kali Anda menjalankan file batch ini, ini akan mengeluarkan representasi tanggal dan waktu gabungan yang kompatibel dengan ISO 8601.
Dalam versi ini, Anda harus berhati-hati untuk tidak menyalin / menempelkan kode yang sama ke beberapa tempat dalam file karena akan menyebabkan label ganda. Anda dapat memiliki label terpisah untuk setiap salinan, atau cukup memasukkan kode ini ke dalam file batch-nya sendiri dan memanggilnya dari file sumber Anda jika diperlukan.
sumber
Cukup gunakan
%date%
variabel:sumber
Sesuai jawaban oleh @ProVi, ubah saja agar sesuai dengan format yang Anda butuhkan
akan kembali
EDIT Sesuai komentar @Jeb, siapa yang benar format waktu di atas hanya akan berfungsi jika perintah DATE / T Anda kembali
Namun, mudah untuk mengedit agar sesuai dengan lokal Anda, dengan menggunakan pengindeksan setiap karakter dalam string yang dikembalikan oleh variabel lingkungan% DATE% yang relevan, Anda dapat mengekstrak bagian-bagian string yang Anda butuhkan.
misalnya. Menggunakan% DATE ~ 10,4% akan memperluas variabel lingkungan DATE, dan kemudian hanya menggunakan 4 karakter yang dimulai pada karakter ke-11 (offset 10) dari hasil yang diperluas
Misalnya jika menggunakan tanggal bergaya AS maka hal berikut ini berlaku
sumber
Saya menetapkan variabel lingkungan ke nilai dalam format numerik yang diinginkan dengan melakukan ini:
sumber
Periksa ini..
sumber
Jika Anda telah menginstal Python, Anda dapat melakukannya
Anda dapat dengan mudah menyesuaikan string format dengan kebutuhan Anda.
sumber
python -c "import datetime;print(datetime.date.today())"
, karena__str__
metodedate
kelas hanya memanggilisoformat()
.Dimungkinkan untuk menggunakan PowerShell dan mengarahkan outputnya ke variabel lingkungan dengan menggunakan loop.
Dari baris perintah (
cmd
):Dalam file batch, Anda mungkin lolos
%a
sebagai%%a
:sumber
FOR /F "tokens=*" %%a IN ('powershell get-date -format "{yyyy\-MM\-dd\THH\:mm\:ss}"') DO SET date=%%a
jadi gunakan MM atas untuk bulan dan garis miring terbalik untuk menghindari karakter literal.Karena format tanggal dan waktu adalah info spesifik lokasi, mengambilnya dari variabel% date% dan% time% akan membutuhkan upaya ekstra untuk mengurai string dengan transformasi format menjadi pertimbangan. Ide yang bagus adalah menggunakan beberapa API untuk mengambil struktur data dan mengurai sesuai keinginan. WMIC adalah pilihan yang bagus. Contoh di bawah ini menggunakan Win32_LocalTime . Anda juga dapat menggunakan Win32_CurrentTime atau Win32_UTCTime .
Hasil:
2018-04-25_10: 03: 11
sumber
Ini adalah perpanjangan dari jawaban Joey dengan memasukkan waktu dan mengisi bagian dengan 0.
Misalnya, hasilnya adalah 2019-06-01_17-25-36. Perhatikan juga bahwa ini adalah waktu UTC.
sumber
sumber
Saya menggunakan yang berikut ini:
Atau dalam kombinasi dengan nama file log 'MyLogFileName':
sumber
Jika PowerShell tersedia, Anda dapat menggunakan kode di bawah ini:
Inilah hasilnya:
sumber
Jika Anda tidak keberatan dengan investasi satu kali 10 hingga 30 menit untuk mendapatkan solusi yang andal (yang tidak bergantung pada pengaturan wilayah Windows), silakan baca terus.
Mari bebaskan pikiran kita. Apakah Anda ingin menyederhanakan skrip agar terlihat seperti ini? (Asumsikan Anda ingin menyetel variabel LOG_DATETIME)
Kamu bisa. Cukup buat FormatNow.exe dengan C # .NET dan tambahkan ke PATH Anda.
Catatan:
Manfaat:
Kode sumber FormatNow.exe yang saya buat dengan Visual Studio 2010 (Saya lebih suka membuatnya sendiri untuk menghindari risiko mengunduh program yang tidak dikenal, mungkin berbahaya). Cukup salin dan tempel kode di bawah, buat program sekali, dan kemudian Anda memiliki pemformat tanggal yang andal untuk semua penggunaan di masa mendatang.
Secara umum, ketika berurusan dengan logika yang rumit, kita dapat membuatnya lebih sederhana dengan membuat program yang sangat kecil dan memanggil program untuk menangkap keluaran kembali ke variabel skrip batch sebagai gantinya. Kami bukan siswa dan kami tidak mengikuti ujian yang mengharuskan kami mengikuti aturan hanya skrip batch untuk menyelesaikan masalah. Dalam lingkungan kerja nyata, metode (legal) apa pun diperbolehkan. Mengapa kita harus tetap berpegang pada kemampuan buruk skrip batch Windows yang memerlukan solusi untuk banyak tugas sederhana? Mengapa kami harus menggunakan alat yang salah untuk pekerjaan itu?
sumber