Bagaimana saya bisa mengulangi setiap file dalam direktori menggunakan for
loop?
Dan bagaimana saya bisa tahu apakah entri tertentu adalah direktori atau apakah itu hanya sebuah file?
windows
batch-file
for-loop
cmd
Vhaerun
sumber
sumber
Jawaban:
Ini mencantumkan semua file (dan hanya file) di direktori saat ini:
Juga jika Anda menjalankan perintah itu dalam file batch Anda harus menggandakan tanda%.
(terima kasih @agnul)
sumber
for /r %i in (*) do ( echo %~nxi )
. Utas ini juga bisa sangat berguna: stackoverflow.com/questions/112055/… .Iterate melalui ...
for %f in (.\*) do @echo %f
for /D %s in (.\*) do @echo %s
for /R %f in (.\*) do @echo %f
for /R /D %s in (.\*) do @echo %s
Sayangnya saya tidak menemukan cara untuk beralih dari file dan subdirer pada saat yang sama.
Cukup gunakan cygwin dengan bash-nya untuk lebih banyak fungsionalitas.
Terlepas dari ini: Apakah Anda memperhatikan, bahwa bantuan buildin dari MS Windows adalah sumber yang bagus untuk deskripsi sintaks baris perintah cmd?
Lihat juga di sini: http://technet.microsoft.com/en-us/library/bb490890.aspx
sumber
%file
dan%subdir
hanya dapat satu karakter yang panjang, yaitu%f
,%s
.Untuk beralih ke setiap file a for loop akan berfungsi:
for %%f in (directory\path\*) do ( something_here )
Dalam kasus saya, saya juga menginginkan konten file, nama, dll.
Ini mengarah ke beberapa masalah dan saya pikir kasus penggunaan saya mungkin membantu. Berikut ini adalah loop yang membaca info dari setiap file '.txt' di direktori dan memungkinkan Anda melakukan sesuatu dengannya (setx misalnya).
* Batasan: val <= %% f hanya akan mendapatkan baris pertama dari file.
sumber
Ada perbedaan halus antara menjalankan
FOR
dari baris perintah dan dari file batch. Dalam file batch, Anda harus meletakkan dua%
karakter di depan setiap referensi variabel.Dari baris perintah:
Dari file batch:
sumber
Untuk-loop ini akan mencantumkan semua file dalam direktori.
"delims =" berguna untuk menampilkan nama file panjang dengan spasi di dalamnya ....
'/ b "hanya tampilkan nama, bukan ukuran tanggal, dll.
Beberapa hal yang perlu diketahui tentang dir / argumen.
Jika Anda menggunakan ini pada commandline, hapus "%".
Semoga ini membantu.
sumber
% 1 merujuk pada argumen pertama yang diteruskan dan tidak dapat digunakan dalam iterator.
Coba ini:
sumber
Coba "BANTUAN" dalam cmd untuk panduan lengkap
Ini adalah panduan untuk perintah XP. http://www.ss64.com/nt/
sumber
Untuk mengulangi semua file dan folder yang dapat Anda gunakan
Untuk beralih hanya melalui semua folder tidak dengan file, maka Anda dapat menggunakan
Di mana
/s
akan memberikan semua hasil di seluruh pohon direktori di kedalaman tak terbatas. Anda bisa melewati/s
jika Anda ingin mengulangi isi folder itu bukan sub foldernyaMenerapkan pencarian dalam iterasi
Untuk beralih melalui file dan folder bernama tertentu Anda dapat mencari nama dan beralih menggunakan untuk loop
Untuk beralih melalui folder / direktori bernama tertentu dan bukan file , kemudian gunakan
/AD
perintah yang samasumber
Saya kesulitan mendapatkan jawaban pel untuk bekerja dengan jalur absolut sampai saya menemukan referensi ini: https://ss64.com/nt/for_r.html
Contoh berikut loop melalui semua file dalam direktori yang diberikan oleh path absolut.
sumber
Kode berikut membuat file Bernama "AllFilesInCurrentDirectorylist.txt" di Direktori saat ini, yang berisi daftar semua file (Hanya File) di Direktori saat ini. Coba lihat
sumber
Itu juga bisa menggunakan perintah forfiles :
dan juga memeriksa apakah itu adalah direktori
sumber
@isdir==true
perlu@isdir==TRUE
Saya akan menggunakan vbscript (Windows Scripting Host), karena dalam batch saya yakin Anda tidak bisa mengatakan bahwa nama adalah file atau direktori.
Dalam vbs, bisa jadi seperti ini:
Periksa FileSystemObject di MSDN .
sumber
Saya menggunakan perintah xcopy dengan opsi / L untuk mendapatkan nama file. Jadi jika Anda ingin mendapatkan direktori atau semua file di subdirektori Anda dapat melakukan sesuatu seperti ini:
Saya hanya menggunakan c: \ sebagai tujuan karena selalu ada di sistem windows dan tidak menyalin sehingga tidak masalah. jika Anda ingin subdirektori juga cukup gunakan opsi / s pada akhirnya. Anda juga dapat menggunakan sakelar xcopy lain jika Anda membutuhkannya karena alasan lain.
sumber
Coba ini untuk menguji apakah file adalah direktori:
Ini hanya akan memberi tahu Anda apakah file BUKAN direktori, yang juga akan benar jika file tersebut tidak ada, jadi pastikan untuk memeriksa itu terlebih dahulu jika Anda perlu. Tanda sisipan (^) digunakan untuk menghindari simbol pengalihan dan output daftar file diarahkan ke NUL untuk mencegahnya ditampilkan, sedangkan output kesalahan daftar DIR diarahkan ke output sehingga Anda dapat menguji terhadap pesan DIR "File Tidak Ditemukan ".
sumber
coba ini:
itu menghitung file .msi dan .exe di direktori Anda (dan di sub direktori). Jadi itu juga membuat perbedaan antara folder dan file sebagai executable.
Tambahkan saja ekstensi (.pptx .docx ..) jika Anda perlu memfilter file lain dalam loop
sumber
Dalam kasus saya, saya harus menghapus semua file dan folder di bawah folder temp. Jadi begini akhirnya saya melakukannya. Saya harus menjalankan dua loop satu untuk file dan satu untuk folder. Jika file atau folder memiliki ruang dalam namanya, maka Anda harus menggunakan ""
sumber
Inilah saya pergi dengan komentar dalam kode.
Saya hanya menyikat oleh keterampilan biatch jadi maafkan kesalahan mencolok.
Saya mencoba menulis solusi all in one sebaik mungkin dengan sedikit modifikasi di mana pengguna membutuhkannya.
Beberapa catatan penting: Ubah saja variabelnya
recursive
untukFALSE
jika Anda hanya ingin file direktori root dan folder diproses. Kalau tidak, itu akan melewati semua folder dan file.C&C sangat disambut ...
sumber