Cari dan Ganti Teks dalam Banyak File dalam Hanya 7 Baris

ernahkah Anda perlu melakukan operasi pencarian / penggantian pada banyak file dalam folder dan semua subfoldernya? Pernahkah Anda perlu mencari / mengganti teks dalam daftar file? Bagaimana dengan melakukan beberapa operasi pencarian / penggantian pada satu file berdasarkan pencarian / ganti pasangan yang ditentukan dalam file teks? Artikel ini menunjukkan bagaimana melakukan masing-masing operasi pencarian / penggantian yang umum menggunakan TEXTools - dan percaya atau tidak - hanya dalam 7 baris kode batch!

Untuk melakukan masing-masing tugas ini, kami akan menggunakan TEXTools (TCL.exe) dari file batch. TEXTools adalah pelengkap sempurna untuk pemrograman file batch karena sangat memperluas kekuatan file batch. Tanpa menerapkan loop tunggal untuk, file batch yang diberkahi TEXTools dapat dengan mudah memproses beberapa file. Ini dimungkinkan karena file batch dapat dibangun dengan cepat oleh file batch lain dan kemudian dipanggil oleh file batch tersebut, (jenisnya seperti kereta yang membangun jalurnya saat berjalan). Alasan mengapa for for loop tidak diperlukan di sini untuk memproses banyak file adalah hanya karena TEXTools dapat mengambil daftar file yang perlu diproses dan menerjemahkan daftar itu ke dalam file batch yang, ketika dijalankan, menghasilkan pemrosesan masing-masing file. file. Sebagai contoh,

...

Salah satu cara untuk melakukan ini adalah dengan menempatkan logika pengeditan ke dalam file batch yang disebut procfile.bat dan kemudian memproses setiap file - satu demi satu - menggunakan procfile.bat seperti ini:

...

Itu bagus jika Anda hanya memiliki 3 file, tetapi bagaimana jika Anda memiliki 100 atau bahkan 1000 file untuk diproses? Di situlah TEXTools muncul. Jika file batch hanya teks dan dapat dibuat dengan cepat, lalu mengapa tidak menggunakan TEXTools untuk mengubah daftar nama file kami menjadi file batch yang, ketika dijalankan, menghasilkan pemrosesan masing-masing file? Jika file batch seperti procfile.bat akan digunakan dalam proses, maka kita sudah setengah jalan ke tujuan kita. Yang kita inginkan adalah daftar nama file yang akan didahului oleh "procfile.bat" dengan satu perubahan - procfile.bat perlu dipanggil. Sekarang kita memiliki file batch yang akan melakukan semua pekerjaan untuk kita:


...

Tentu saja, ini adalah hal yang paling baik dilakukan oleh TEXTools. Menambahkan teks, "panggil procfile.bat" ke bagian depan setiap baris dalam file teks yang berisi ratusan nama file - untuk membuat dan menjalankan file batch on-the-fly adalah mudah:

ketik ListOfFiles.txt | tcl InsStr 1 'panggil procfile.bat'> t $ 1.bat

hubungi t $ 1.bat

Kami sekarang siap untuk menangani tugas kami kecuali satu bagian puzzle yang hilang. Kami membutuhkan procfile.bat kami. Kita perlu menganggap sebagai argumen nama file, teks pencarian, dan teks pengganti:

ProcFile

Secara internal, ProcFile.bat akan mengedit file yang diberikan dengan mengganti semua kemunculan dengan di dalam file. Pada dasarnya, ini dapat dilakukan hanya dengan dua baris kode (di bawah Windows 95 dan 98, dll. Ini dapat dilakukan dalam satu baris tanpa perlu file perantara sementara):

ketik% 1 | tcl "ReplStr '% 2' '% 3'"> t $ 1.txt

ketik t $ 1.txt>% 1

Pada kenyataannya, kita perlu sedikit lebih dari ini. Bagaimana jika teks pencarian atau teks pengganti ditentukan memiliki sisipan yang kosong? Ini hanya dapat dilakukan pada command prompt dengan menggunakan tanda kutip ganda seperti ini:

ProcFile myfile.txt "mobil merah" "mobil biru"

Masalahnya adalah tanda kutip ganda yang mengelilinginya ini adalah bagian dari parameter sejauh menyangkut Windows. Namun sejauh yang kami ketahui, mereka tidak demikian dan kami harus menyingkirkan mereka. Sekali lagi, ini adalah masalah sederhana menggunakan TEXTools:

gema% 2 | tcl "ReplStr '# 22' '' | InsStr 1 'set search ='"> t $ 1.bat

gema% 3 | tcl "ReplStr '# 22' '' | InsStr 1 'set replace ='" >> t $ 1.bat

hubungi t $ 1.bat

Tiga garis ajaib ini hanya menghapus tanda kutip ganda di sekitarnya dari masing-masing parameter pencarian / ganti yang diteruskan ke ProcFile. Bukan berarti parameter itu sendiri diubah dengan cara apa pun. Konten yang tidak dikutip hanya disalin ke variabel lingkungan! Perhatikan lagi penggunaan file batch on-the-fly untuk mencapai ini. Meletakkan trek ...

Jadi sekarang, ProcFile.bat kami terlihat seperti ini:

:: Hapus tanda kutip ganda di sekitarnya dari teks pencarian / ganti ...

gema% 2 | tcl "ReplStr '# 22' '' | InsStr 1 'set search ='"> t $ 1.bat

gema% 3 | tcl "ReplStr '# 22' '' | InsStr 1 'set replace ='" >> t $ 1.bat

hubungi t $ 1.bat

:: Lakukan penggantian teks pada file ini ...

ketik% 1 | tcl "ReplStr '% search%' '% replace%'"> t $ 1.txt

ketik t $ 1.txt>% 1

Ingatlah bahwa ini adalah implementasi ProcFile.bat tanpa tulang. Biasanya, Anda akan menyertakan beberapa logika untuk membatalkan eksekusi jika semua parameter tidak disediakan, dll. Tetapi ini hanya demonstrasi. Untuk file kumpulan aktual, lihat contoh "Cari dan Ganti" yang tersedia di paket unduhan TEXTools (diinstal di bawah folder "Contoh Skrip") dan juga tersedia online di [http: //www.fireflysoftware.comTEXToolsexamples.htm]. Sekarang, ke hal-hal yang lebih besar dan lebih baik ...

Menggunakan Pencarian File Rekursif

Sekarang kita memiliki file batch yang melakukan penggantian teks pada file tunggal, bagaimana kita dapat menggunakannya untuk memproses semua file dalam folder tertentu dan subfoldernya? Kunci untuk ini terletak pada perintah DIR. Ketika digunakan dengan sakelar / b dan / s, perintah DIR mencantumkan (sepenuhnya memenuhi syarat) semua file dalam folder (dan semua subfoldernya) yang cocok dengan spesifikasi file yang diberikan. Bayangkan ... daftar semua file dalam folder yang diberikan dan subfoldernya yang cocok mengatakan, spesifikasi file, "work * .txt"! Dalam istilah praktis yang diterjemahkan menjadi permata seperti ini:

dir% 1 / b / s | tcl "InsStr 1 'panggil ProcFile.bat # 22' | AppendStr '# 22% 2% 3'"> t $ 2.bat

hubungi t $ 2.bat

Berikut adalah file batch (katakanlah, "Recursive.bat") yang dapat dipanggil sebagai berikut:

Pekerjaan rekursif * .txt "ini" "itu"

Di sini, itu akan menggantikan semua contoh "ini" dengan "itu" di semua file (dalam folder saat ini dan subfolder) yang cocok dengan "work * .txt". Tidak buruk untuk 7 baris kode batch, eh?

Menggunakan Daftar File

Jika file yang akan diedit tercantum dalam file teks, kode batch yang diperlukan untuk memprosesnya hampir identik dengan yang di atas:

ketik% 1 | tcl "InsStr 1 'panggil ProcFile.bat # 22' | AppendStr '# 22% 2% 3'"> t $ 2.bat

hubungi t $ 2.bat

Satu-satunya perbedaan adalah di mana daftar file berasal. Dengan pendekatan ini, yang Anda butuhkan hanyalah daftar file dalam file teks untuk diproses. File batch seperti itu dapat disebut seperti ini:

ProcFileList FileList.txt "ini" "itu"

Ini akan menggantikan semua contoh "ini" dengan "itu" di semua file yang terdaftar di FileList.txt.

Menggunakan Daftar Pengganti

Contoh terakhir pencarian dan penggantian ini melakukan banyak pengeditan pada satu file dengan menggunakan file yang berisi beberapa pasangan pencarian / ganti. Sekali lagi, panggilan ke ProcFile adalah semua yang diperlukan:

ketik% 2 | tcl "InsStr 1 'panggil ProcFile.bat% 1'"> t $ 2.bat

hubungi t $ 2.bat

File batch seperti ini mungkin disebut ProcReplList.bat. Berikut adalah bagaimana ia dipanggil untuk melakukan beberapa operasi pencarian / penggantian di MyFile.txt menggunakan pasangan pencarian / ganti yang ditemukan di Replacements.txt:

ProcReplList MyFile.txt Replacements.txt

Catatan: Setiap contoh pencarian / penggantian di atas dapat ditemukan online di [http: //www.fireflysoftware.comTEXToolsexamples.htm] atau di dalam paket unduhan TEXTools, (dipasang di bawah folder "Contoh Skrip").

Izin diberikan untuk secara bebas memposting atau mendistribusikan artikel ini selama itu belum diedit dan informasi kredit dan hak cipta dibiarkan utuh.

Komentar

Postingan populer dari blog ini

Keterampilan Beragam untuk Pasar Kerja Industri Komputer Saat Ini

Mengintegrasikan RFID Ke Dalam Kemasan Anda

Utilitas Gaya IT Departemen - Sebuah Mitos Atau Sebuah Realitas yang Tak Terelakkan?