Dalam file batch, saya punya string abcdefg
. Saya ingin memeriksa apakahbcd
ada dalam string.
Sayangnya sepertinya semua solusi yang saya temukan mencari file untuk substring, bukan string untuk substring.
Apakah ada solusi mudah untuk ini?
Dalam file batch, saya punya string abcdefg
. Saya ingin memeriksa apakahbcd
ada dalam string.
Sayangnya sepertinya semua solusi yang saya temukan mencari file untuk substring, bukan string untuk substring.
Apakah ada solusi mudah untuk ini?
Windows
dancmd
atau itums-dos
. MSDOS belum bagian dari Windows untuk lama waktu.Jawaban:
Ya, Anda dapat menggunakan substitusi dan memeriksa string asli:
The
%str1:bcd=%
bit akan menggantibcd
dalamstr1
dengan string kosong, sehingga berbeda dari aslinya.Jika aslinya tidak mengandung
bcd
string di dalamnya, versi yang diubah akan identik.Pengujian dengan skrip berikut akan menunjukkannya dalam tindakan:
Dan hasil dari berbagai proses:
Beberapa catatan:
if
pernyataan adalah daging dari solusi ini, segala sesuatu yang lain adalah dukungan hal.x
sebelum kedua belah pihak kesetaraan ini adalah untuk memastikan bahwa stringbcd
bekerja baik-baik saja. Ini juga melindungi terhadap karakter awal "tidak patut" tertentu.sumber
Anda dapat menyalurkan string sumber ke
findstr
dan memeriksa nilaiERRORLEVEL
untuk melihat apakah string pola ditemukan. Nilai nol menunjukkan keberhasilan dan pola ditemukan. Berikut ini sebuah contoh:Ketika ini dijalankan di CMD.EXE, kita mendapatkan:
sumber
Saya biasanya melakukan sesuatu seperti ini:
Contoh:
Keluaran:
Saya tidak tahu apakah ini cara terbaik.
sumber
Untuk kompatibilitas dan kemudahan penggunaan, sering kali lebih baik menggunakan FIND untuk melakukan ini.
Anda juga harus mempertimbangkan apakah Anda ingin mencocokkan case sensitif atau case sensitif.
Metode dengan 78 poin (saya yakin saya merujuk pada posting paxdiablo) hanya akan cocok dengan Case Sensitive, jadi Anda harus meletakkan cek terpisah untuk setiap variasi kasus untuk setiap kemungkinan iterasi yang mungkin ingin Anda cocokkan.
(Betapa merepotkan! Hanya 3 huruf yang berarti 9 tes berbeda untuk menyelesaikan cek!)
Selain itu, sering kali lebih baik untuk mencocokkan output perintah, variabel dalam satu lingkaran, atau nilai variabel pointer di batch / CMD Anda yang tidak lurus ke depan.
Untuk alasan ini, ini adalah metodologi alternatif yang lebih disukai:
Gunakan: Temukan [/ I] [/ V] "Karakter yang Cocok"
[/ I] (Huruf peka) [/ V] (TIDAK boleh mengandung karakter)
Sebagai Baris Tunggal:
Multi-line:
Seperti yang disebutkan ini bagus untuk hal-hal yang tidak ada dalam variabel yang memungkinkan penggantian string juga:
sumber
setlocal EnableExtensions
kemudianIF /I
untuk melakukan perbandingan kasus sensitif.Jika Anda mendeteksi keberadaan, berikut adalah solusi termudah:
Ini berfungsi baik untuk menjatuhkan output perintah windows ke dalam variabel boolean. Ganti gema dengan perintah yang ingin Anda jalankan. Anda juga dapat merangkai Findstr bersama untuk lebih lanjut memenuhi syarat pernyataan menggunakan pipa. EG untuk Kontrol Layanan (SC.exe)
Yang satu mengevaluasi output dari SC Query untuk layanan pembaruan windows yang keluar sebagai teks multiline, menemukan baris yang berisi "status" kemudian menemukan jika kata "running" muncul pada baris itu, dan mengatur tingkat kesalahan sesuai.
sumber
SET STRING=abcdefgh SET SUBSTRING=bcd ECHO %STRING% | FINDSTR /C:"%SUBSTRING%" >nul & IF ERRORLEVEL 1 (ECHO CASE FALSE) else (ECHO CASE TRUE)
Saya mungkin datang agak terlambat dengan jawaban ini, tetapi jawaban yang diterima hanya berfungsi untuk memeriksa apakah "hard-coded string" adalah bagian dari string pencarian.
Untuk pencarian dinamis, Anda harus melakukan ini:
Catatan: Anda bisa menggunakan dua variabel sebagai argumen.
sumber
Jawaban yang lebih baik ada di sini :
sumber
sumber
Solusi yang mencari file untuk substring juga dapat mencari string , misalnya.
find
ataufindstr
.Dalam kasus Anda, solusi mudahnya adalah menyalurkan string ke dalam perintah alih-alih memberikan nama file misalnya.
string case-sensitive:
echo "abcdefg" | find "bcd"
abaikan case string:
echo "abcdefg" | find /I "bcd"
JIKA tidak ditemukan kecocokan, Anda akan mendapatkan respons baris kosong pada CMD dan% ERRORLEVEL% ditetapkan ke 1
sumber