Saya menemukan bug dalam skrip DOS saya yang menggunakan data tanggal dan waktu untuk penamaan file. Masalahnya adalah saya berakhir dengan celah karena variabel waktu tidak secara otomatis memberikan nol di depan untuk jam <10. Jadi menjalankan> echo% time% memberikan kembali: '9: 29: 17.88'.
Apakah ada yang tahu cara mengkondisikan nol di depan untuk memperbaiki ini?
Info lebih lanjut: Perintah kumpulan nama file saya adalah:
set logfile=C:\Temp\robolog_%date:~-4%%date:~4,2%%date:~7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log
yang akhirnya menjadi: C: \ Temp \ robolog_20100602_ 93208.log (untuk 9:23 pagi).
Pertanyaan ini terkait dengan yang ini .
Terima kasih
Jawaban:
Cara yang sangat sederhana adalah dengan hanya mengganti ruang terdepan dengan nol:
echo %TIME: =0%
keluaran:
09:18:53,45
sumber
set HH=%time:~-11,2% set MM=%time:~-8,2% set SS=%time:~-5,2% set ISOTIME=%HH: =0%-%MM%-%SS% echo %ISOTIME%
juga ss64.com/nt/syntax-replace.htmlset timestring=%TIME: =0%
di awal panggilan sub - kemudian hanya bekerja dengantimestring
gantinya (atau variabel apa pun yang Anda gunakan).Solusi saya adalah menggunakan ide berikut:
sumber
but gives syntax error on server 2003
- mengapa Anda peduli pada tahun 2016?Ide yang mirip dengan jawaban Dennis . Masalahnya adalah bahwa lebar
%time%
selalu sama, sehingga menyisipkan spasi di awal alih-alih mengembalikan string yang lebih pendek.Anda dapat menghilangkannya dengan
for
:Sisanya kurang lebih sama.
sumber
Menggunakan Kontribusi Jesse, saya baru saja membuat variabel dengan output yang dimodifikasi. Lalu saya referensi variabel itu untuk membangun porsi jam.
Dengan sumber asli:
Terima kasih Jesse. Saya akan memilih jika saya memiliki poin reputasi.
sumber
Untuk solusi paling ringkas mengimplementasikan semua hal di atas, saya pikir itu
akan bekerja di sini tanpa menambahkan baris baru ke skrip. Ini mungkin kurang elegan daripada beberapa solusi perintah, meskipun ..
sumber
Berikut ini mengambil beberapa baris lagi tetapi jelas dan dapat dimengerti. Menghemat stdout dan stderr untuk memisahkan file, masing-masing dengan stempel waktu. Stempel waktu mencakup tahun, bulan, hari, jam, menit, dan kedua, dalam urutan itu. Stempel waktu harus selalu memiliki komponen tanggal paling penting terlebih dahulu (tahun) dan komponen paling sedikit (detik) terakhir. Itu memungkinkan daftar file dalam urutan waktu. Tanpa basa-basi lagi, inilah solusi saya.
sumber
Ini mengetuk nol ke awal waktu dan mengambil dua digit terakhir jam (posisi awal menit dan kedua digeser oleh satu). Jadi 3:00 menjadi "03" lalu "03" dan jam 15 menjadi "015" lalu "15".
Kurang mudah dibaca:
sumber
Satu baris kode akan melakukan apa yang Anda butuhkan:
Sebagai contoh, saya menggunakan% Date% dan kemudian menambahkan nol di depan ke variabel yang saya gunakan untuk menentukan apakah saya perlu mengganti spasi di depan dengan nol untuk% Time%.
sumber
Ini membuat timestamp yang dapat diurutkan dan baris kedua memastikan tidak ada ruang untuk satu digit jam, dll, untuk membuatnya dapat digunakan untuk skrip:
Keluaran:
sumber
Terima kasih untuk membantu dari atas ... Ini yang saya gunakan:
Saya kemudian memiliki log yang dipanggil dalam pekerjaan Robocopy seperti ini:
Ada banyak yang seperti ini:
Mengakhiri pekerjaan dengan ini:
COMPLETE_LOG_2018-06-27_10_53_54.log
adalah file yang diproduksi di akhir dan disortir berdasarkan nama file.sumber
Jawaban Jesse memecahkan masalah saya mengganti nama file dengan menghilangkan ruang di bidang jam. Ini adalah cara saya mengatur variabel saya:
Ini bekerja seperti juara; untuk beberapa alasan tanggal tidak memerlukan perlakuan yang sama, tapi saya membayangkan itu tergantung pada pengaturan regional.
sumber
sumber
sumber