Jawaban:
Mencoba
if NOT "asdf" == "fdas" echo asdf
Gunakan NEQ sebagai gantinya.
if "asdf" NEQ "fdas" echo asdf
Saya tahu ini sudah ketinggalan zaman, tetapi ini mungkin masih berguna bagi mereka yang datang terlambat ke pesta. (EDIT: diperbarui karena ini masih mendapat lalu lintas dan @ Goozak telah menunjukkan di komentar bahwa analisis asli saya terhadap sampel juga salah.)
Saya menarik ini dari kode contoh di tautan Anda:
IF !%1==! GOTO VIEWDATA
REM IF NO COMMAND-LINE ARG...
FIND "%1" C:\BOZO\BOOKLIST.TXT
GOTO EXIT0
REM PRINT LINE WITH STRING MATCH, THEN EXIT.
:VIEWDATA
TYPE C:\BOZO\BOOKLIST.TXT | MORE
REM SHOW ENTIRE FILE, 1 PAGE AT A TIME.
:EXIT0
!%1==!
hanyalah penggunaan idiomatis yang ==
dimaksudkan untuk memverifikasi bahwa benda di sebelah kiri, yang berisi variabel Anda, berbeda dari benda di sebelah kanan, yang tidak. Dalam !
hal ini hanyalah placeholder karakter. Itu bisa apa saja. Jika %1
memiliki konten, maka kesetaraan akan palsu, jika tidak Anda hanya akan membandingkan !
untuk !
dan itu akan menjadi kenyataan.
!==!
bukan operator, jadi menulis "asdf" !==! "fdas"
itu tidak masuk akal.
Saran untuk menggunakan if not "asdf" == "fdas"
pasti cara untuk pergi.
!
digunakan di sini dalam kasus %1
kosong, sehingga menghasilkan tes !==!
, yang benar. Anda dapat menggunakan %1.==.
sebagai gantinya (hampir semua karakter akan melakukan) - tujuannya adalah untuk memastikan bahwa kedua sisi tes kesetaraan memiliki sesuatu untuk diuji. The !==!
notasi ini jelas tidak tanda tidak-sama. Lebih baik bertahan dengan if not ...
.
Mencoba:
if not "asdf" == "fdas" echo asdf
Itu bekerja untuk saya di Windows XP (saya mendapatkan kesalahan yang sama seperti Anda untuk kode yang Anda posting).
NEQ biasanya digunakan untuk angka dan == biasanya digunakan untuk perbandingan string.
Saya tidak dapat menemukan dokumentasi yang menyebutkan operand ketidaksetaraan spesifik dan setara untuk perbandingan string (sebagai ganti NEQ). Solusi menggunakan JIKA TIDAK == tampaknya pendekatan yang paling masuk akal. Saya tidak bisa segera memikirkan keadaan di mana evaluasi operasi dalam file batch akan menyebabkan masalah atau perilaku yang tidak terduga ketika menerapkan metode perbandingan JIKA TIDAK == ke string.
Saya berharap saya dapat menawarkan wawasan tentang bagaimana dua fungsi berperilaku berbeda pada tingkat yang lebih rendah - akan membongkar file batch yang terpisah (yang menggunakan NEQ dan JIKA TIDAK ==) menawarkan petunjuk apa pun dalam hal API asli (didokumentasikan secara tidak resmi) panggilan API asli conhost.exe Apakah memanfaatkan?