Adakah yang bisa memberitahu saya bagaimana melakukan hal berikut dalam skrip batch Windows? ( *.bat
):
- Buat folder hanya jika belum ada
Secara lebih rinci, saya ingin membuat folder bernama VTS
di C:\
drive, tetapi hanya jika folder itu belum ada. Saya tidak ingin menimpa isi folder jika sudah ada dan batch dijalankan.
windows
batch-file
cmd
Tagihan
sumber
sumber
if not exist "%Folder%" mkdir "%New-Folder%"
Jawaban:
Anda hanya menggunakan ini:
if not exist "C:\VTS\" mkdir C:\VTS
ia akan membuat direktori hanya jika folder tidak ada.Perhatikan bahwa tes keberadaan ini akan mengembalikan true hanya jika VTS ada dan merupakan direktori. Jika tidak ada di sana, atau ada sebagai file, perintah mkdir akan berjalan, dan harus menyebabkan kesalahan. Anda mungkin ingin memeriksa apakah VTS juga ada sebagai file.
sumber
NUL
.if exist "a" if not exist "a\" (echo "it's a file") else (echo "it's a dir")
. Tentang kalimat terakhir Anda, saya curiga ada yang salah dengan file batch Anda di tempat lain.Lihat juga https://support.microsoft.com/en-us/kb/65994
(Pembaruan 7 Maret 2018; Artikel Microsoft sedang down, arsipkan di https://web.archive.org/web/20150609092521/https://support.microsoft.com/en-us/kb/65994 )
sumber
NUL
bersama satu L.Panggil saja
mkdir C:\VTS
apa pun yang terjadi. Ini hanya akan melaporkan bahwa subdirektori sudah ada.Sunting: Seperti yang telah dicatat orang lain, ini tidak mengatur% ERRORLEVEL% jika folder sudah ada. Jika kumpulan Anda (atau proses apa pun menyebutnya) tidak peduli dengan tingkat kesalahan, metode ini berfungsi dengan baik. Karena pertanyaan tidak menyebutkan menghindari tingkat kesalahan, jawaban ini sangat valid. Ini memenuhi kebutuhan membuat folder jika tidak ada, dan itu tidak menimpa isi folder yang ada. Kalau tidak, ikuti jawaban Martin Schapendonk .
sumber
membuat folder bernama
VTS
dan outputA subdirectory or file TEST already exists
untukNUL
.atau
mengubah huruf drive untuk
C:
,mkdir
, kesalahan output keNUL
dan menjalankan perintah selanjutnya.sumber
NUL
sebagai file keluaran.sumber
log
. Perbedaannya sangat tipis, tetapi akan menyebabkan bug yang sulit ditemukan di skrip Anda.Saya menggunakan cara ini, Anda harus meletakkan backslash di akhir nama direktori untuk menghindari tempat itu ada dalam file tanpa ekstensi dengan nama yang sama dengan direktori yang Anda tentukan, jangan pernah gunakan "C: \ VTS" karena bisa file ada dengan nama "VTS" disimpan di "C:" partisi, cara yang benar adalah dengan menggunakan "C: \ VTS \" , periksa backslash setelah VTS , begitu juga cara yang benar.
sumber
!errorlevel!
, yaitu, ekspansi tertunda. Jika tidak, variabelERRORLEVEL
akan diuraikan sebelum memasukkan yang pertamaif
(yaitu, pada waktu parse). Sekarang diuraikan pada waktu eksekusi, sehingga dapat menangkap hasilmkdir
. Anda juga benar dalam hal itu, meskipun Anda menguji keberadaan, Anda harus tetap menguji keberhasilan (pikirkan: akses ditolak kesalahan, misalnya). Solusi yang sangat bagus dibandingkan yang lain, +10 !!!Kamu bisa menggunakan:
Anda juga dapat memperluas kode untuk mengganti file yang diharapkan hilang.
sumber
saya membuat ini untuk skrip saya gunakan dalam pekerjaan saya untuk eyebeam.
sumber