ตามนี้ , !==!
เป็นผู้ประกอบการสตริงที่ไม่เท่ากัน ลองเลยฉันจะได้รับ:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
ผมทำอะไรผิดหรือเปล่า?
ตามนี้ , !==!
เป็นผู้ประกอบการสตริงที่ไม่เท่ากัน ลองเลยฉันจะได้รับ:
C:\> if "asdf" !==! "fdas" echo asdf
!==! was unexpected at this time.
ผมทำอะไรผิดหรือเปล่า?
คำตอบ:
ลอง
if NOT "asdf" == "fdas" echo asdf
ใช้ NEQ แทน
if "asdf" NEQ "fdas" echo asdf
ฉันรู้ว่ามันค่อนข้างล้าสมัย แต่ก็อาจเป็นประโยชน์สำหรับผู้ที่มาปาร์ตี้ช้า (แก้ไข: อัปเดตเนื่องจากยังมีการรับส่งข้อมูลและ @Goozak ได้ชี้ให้เห็นในความคิดเห็นว่าการวิเคราะห์ตัวอย่างของฉันไม่ถูกต้องเช่นกัน)
ฉันดึงสิ่งนี้จากโค้ดตัวอย่างในลิงค์ของคุณ:
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==!
เป็นการใช้สำนวนที่==
ตั้งใจจะตรวจสอบว่าสิ่งที่อยู่ทางซ้ายซึ่งมีตัวแปรของคุณนั้นแตกต่างจากสิ่งที่อยู่ทางขวานั่นไม่ใช่ !
ในกรณีนี้เป็นเพียงตัวละครตัวยึด มันอาจเป็นอะไรก็ได้ หาก%1
มีเนื้อหาที่แล้วความเท่าเทียมกันจะเป็นเท็จถ้ามันไม่ได้คุณจะเพิ่งจะเปรียบเทียบ!
ไป!
และมันจะเป็นความจริง
!==!
ไม่ใช่ตัวดำเนินการดังนั้นการเขียน"asdf" !==! "fdas"
จึงค่อนข้างไร้สาระ
คำแนะนำในการใช้if not "asdf" == "fdas"
เป็นวิธีที่จะไป
!
ถูกนำมาใช้ในกรณีที่นี่%1
เป็นที่ว่างเปล่าจึงทำให้เกิดการในการทดสอบ!==!
ที่เป็นจริง คุณสามารถใช้%1.==.
แทน (เกือบทุกตัวละครจะทำ) - จุดประสงค์เพื่อให้แน่ใจว่าทั้งสองด้านของการทดสอบความเท่าเทียมกันมีบางสิ่งที่จะทดสอบ !==!
โน้ตแน่นอนไม่ได้เป็นสัญญาณที่ไม่เท่ากัน if not ...
ติดที่ดีขึ้นด้วย
ลอง:
if not "asdf" == "fdas" echo asdf
ใช้งานได้กับฉันใน Windows XP (ฉันได้รับข้อผิดพลาดเดียวกับรหัสที่คุณโพสต์)
มักจะใช้ NEQ สำหรับตัวเลขและโดยทั่วไปแล้ว == จะใช้สำหรับการเปรียบเทียบสตริง
ฉันไม่พบเอกสารใด ๆ ที่กล่าวถึงตัวถูกดำเนินการที่ไม่เท่ากันและเทียบเท่าสำหรับการเปรียบเทียบสตริง (แทนที่ NEQ) การแก้ปัญหาโดยใช้ IF NOT == ดูเหมือนจะเป็นแนวทางที่ดีที่สุด ฉันไม่สามารถคิดได้ทันทีถึงสถานการณ์ที่การประเมินผลการดำเนินงานในไฟล์แบทช์จะทำให้เกิดปัญหาหรือพฤติกรรมที่ไม่คาดคิดเมื่อใช้ IF NOT == วิธีเปรียบเทียบกับสตริง
ฉันหวังว่าฉันสามารถเสนอข้อมูลเชิงลึกเกี่ยวกับวิธีที่ทั้งสองฟังก์ชันทำงานแตกต่างกันในระดับที่ต่ำกว่า - จะแยกส่วนแบตช์ไฟล์แยกต่างหาก (ที่ใช้ NEQ และหากไม่ ==) เสนอเบาะแสใด ๆ กำลังใช้งานอยู่?