Saya memiliki satu set nama file dasar, untuk setiap nama 'f' sebenarnya ada dua file, 'f.in' dan 'f.out'. Saya ingin menulis file batch (di Windows XP) yang melewati semua nama file, untuk masing-masing harus:
- Tampilkan nama dasar 'f'
- Lakukan tindakan pada 'f.in'
- Lakukan tindakan lain di 'f.out'
Saya tidak punya cara untuk membuat daftar nama file dasar, selain mencari * .in (atau * .out) misalnya.
command-line
windows-xp
batch-file
Luke Halliwell
sumber
sumber
Jawaban:
Dengan asumsi Anda memiliki dua program yang memproses dua file, process_in.exe dan process_out.exe:
%% ~ nf adalah pengubah substitusi, yang memperluas% f menjadi nama file saja. Lihat pengubah lain di https://technet.microsoft.com/en-us/library/bb490909.aspx (di tengah halaman) atau hanya di jawaban berikutnya.
sumber
%%f
mengapa%%~nf
nanti?~
pengubah untuk melakukan hal-hal, seperti dalam contoh saya, dapatkan nama file. Ini hanya kebiasaan bagi saya untuk menggunakannya kalau-kalau*
jalan penuh atau sesuatu. Ada beberapa pengubah ini (di tengah halaman): microsoft.com/resources/documentation/windows/xp/all/proddocs/…Anda dapat menggunakan baris ini untuk mencetak konten desktop Anda:
Setelah Anda memiliki
%%I
variabel, Anda dapat melakukan perintah dengan mudah (cukup ganti kata echo dengan program Anda)Selain itu, substitusi referensi variabel UNTUK telah ditingkatkan Anda sekarang dapat menggunakan sintaks opsional berikut:
https://ss64.com/nt/syntax-args.html
Dalam contoh di atas
%I
dan PATH dapat diganti dengan nilai-nilai valid lainnya. The%~
sintaks diakhiri dengan nama variabel UNTUK valid. Memilih nama variabel huruf besar suka%I
membuatnya lebih mudah dibaca dan menghindari kebingungan dengan pengubah, yang tidak peka huruf besar-kecil.Anda bisa mendapatkan dokumentasi lengkap dengan mengetik
FOR /?
sumber
%%I was unexpected at this time.
%I
sebagai gantinya%%I
Cara termudah, seperti yang saya lihat, adalah dengan menggunakan loop untuk yang memanggil file batch kedua untuk diproses, melewati file kedua itu nama dasar.
Menurut untuk /? bantuan, nama bas dapat diekstraksi menggunakan opsi bagus ~ n. Jadi, skrip dasarnya akan berbunyi:
Kemudian, dalam process.cmd, asumsikan bahwa% 0 berisi nama dasar dan bertindak sesuai dengannya. Sebagai contoh:
Mungkin ada cara yang lebih baik untuk melakukan ini dalam satu skrip, tapi saya selalu agak kabur tentang cara menarik beberapa perintah dalam satu untuk loop dalam file batch.
EDIT: Itu luar biasa! Saya entah bagaimana melewatkan halaman di dokumen yang menunjukkan bahwa Anda dapat melakukan blok multi-baris dalam loop FOR. Saya akan harus kembali dan menulis ulang beberapa file batch sekarang ...
sumber
Memperluas pada posting Nathans . Berikut ini akan melakukan banyak pekerjaan dalam satu file batch.
sumber
Ada alat yang biasanya digunakan dalam Server MS (sejauh yang saya ingat) disebut forfiles :
Tautan di atas berisi bantuan serta tautan ke halaman unduhan microsoft.
sumber
Kode di bawah ini memfilter nama file yang dimulai dengan substring yang diberikan. Itu dapat diubah agar sesuai dengan kebutuhan yang berbeda dengan bekerja pada ekstraksi subfname dan pernyataan IF:
sumber
Echoing f.in dan f.out akan memisahkan konsep apa yang harus loop dan apa yang tidak untuk loop ketika digunakan dalam for / f loop.
Meskipun Anda tidak bertanya, cara yang baik untuk mengirimkan perintah ke f.in dan f.out adalah dengan ...
Tautan ke semua perintah Windows XP: tautan
Saya minta maaf jika saya tidak menjawab ini dengan benar. Pertanyaan itu sangat sulit bagi saya untuk dibaca.
sumber