สิ่งสำคัญคือเมื่อใช้% 1 เพื่อวางบางสิ่งไว้รอบ ๆ เพื่อป้องกันไม่ให้แฟ้มชุดงานแตกเมื่อ% 1 ว่างเปล่าเนื่องจาก% 1 ไม่ใช่ตัวแปรจึงได้รับการแทนที่ด้วยค่าเช่นการฉีด SQL ตัวอย่างของการฉีดเป็นชุด และเมื่อไม่มีสิ่งใดมีค่าและ% 1 อยู่ใน IF คุณจะได้รับรหัสที่เสียหาย if %1==""
กลายเป็น if == ""
และให้ข้อผิดพลาด
สำหรับสาเหตุถ้าการกำหนดไม่ทำงานบน% 1,% 1 เป็นค่าที่ไม่ใช่ตัวแปรดังนั้นการกำหนดจึงไม่ทำงานที่นั่น สำหรับรหัสที่ใช้งานได้กับ% 1 ว่างเปล่าคุณต้องใช้รหัสที่จะไม่แตกเมื่อ% 1 ถูกแทนที่ด้วยอะไร ลอง if "%1"==""
หรือลอง if [%1]==[]
การพูด -% 1 ดูสับสนเล็กน้อยมันไม่เหมือนกับการประชุมที่ดีสำหรับฉัน! ในทางเทคนิคคุณสามารถทำได้ if a%1==a%1
หรือ if %1a==%1a
แต่การประชุมมีแนวโน้มที่จะเป็น []
คุณสามารถใช้เครื่องหมายคำพูดหรือ [] หรือตัวละครอะไรก็ได้ แต่เนื่องจาก supercat ได้ชี้ให้เห็นในความคิดเห็นราคาไม่ใช่ความคิดที่ดีเกี่ยวกับ% 1 (เพราะถ้า% 1 มีช่องว่างผู้ใช้จะใส่เครื่องหมายอัญประกาศในสิ่งที่ได้รับการส่งผ่านไปยัง% 1 และถ้ามีช่องว่างใน% 1 และในไฟล์แบตช์ที่คุณใส่เครื่องหมายคำพูดไว้รอบ ๆ % 1 เครื่องหมายคำพูดจะถูกยกเลิก และช่องว่างที่ไม่ได้ระบุไว้จะทำให้เกิดข้อผิดพลาด)
หากคุณทำ IF บนบรรทัดคำสั่งและไม่ทดสอบตัวแปรใด ๆ คุณจะไม่มี% 1 และคุณไม่จำเป็นต้องมี [] คุณจะพูดว่า IF "a b c"=="a b c" echo a
หรือ IF a==b echo a
หากในไฟล์แบตช์คุณมักจะมี% 1 และแทนที่จะใช้เครื่องหมายคำพูดรอบ ๆ % 1 ใช้เช่น หนึ่งหรือสองตัวอักษรรอบตัวเช่น [%1]
และใช้เครื่องหมายคำพูดหากคุณต้องการรักษาช่องว่างและไม่ใช่% 1 เช่น เช่น. IF [%1]==[a]
หรือ IF [%1]==["a b"] echo a
อย่าทำ "%1"
เนื่องจาก% 1 อาจมีเครื่องหมายคำพูดอยู่แล้วซึ่งเครื่องหมายคำพูดของคุณจะถูกยกเลิกและถ้า% 1 มีช่องว่างถ้า if คำสั่งแตก
หากคุณอยู่ในบรรทัดคำสั่งและกำลังทดสอบตัวแปรมันขึ้นอยู่กับว่าตัวแปรนั้นมีเครื่องหมายคำพูดหรือไม่ คุณสามารถดูเนื้อหา
เป็นไปได้ที่ตัวแปรจะมีช่องว่างและไม่มีเครื่องหมายคำพูด
ดังนั้นในกรณีบรรทัดคำสั่งนี้การใส่เครื่องหมายคำพูดรอบ ๆ % a% จะไม่เพิ่มเครื่องหมายคำพูดคู่และคุณต้องใส่เครื่องหมายคำพูดรอบ ๆ % a% ถ้าคุณต้องการทดสอบกับ "a b"
C:\>set a=a b
C:\>echo %a%
a b
C:\>IF %a%=="a b" echo sdf
b=="a b" was unexpected at this time.
C:\>IF "%a%"=="a b" echo sdf
sdf
So ^^^ we want "%a%"
ในกรณีที่% a% มีเครื่องหมายคำพูดมันจะเป็นกรณีอื่น
C:\>set a="a b"
C:\>echo %a%
"a b"
C:\>IF %a%=="a b" echo a
a
C:\>IF "%a%"=="a b" echo a
b""=="a b" was unexpected at this time.
C:\>
^^^^ So there we want %a% without quotes around it.
ดังนั้นทุกคำถามว่าตัวแปรหรือพารามิเตอร์มีเครื่องหมายคำพูดหรือไม่ หาก% 1 มีช่องว่างในนั้นจะมีเครื่องหมายคำพูด ดังนั้นเรารู้ว่าถ้าเราเปรียบเทียบ% 1 กับ "a b" ดังนั้น w จะไม่ทำ "% 1" และถ้า% 1 ไม่มีเครื่องหมายคำพูดมันจะไม่มีช่องว่างดังนั้นเราจะไม่ทำ "% 1" ดังนั้นฉันคิดว่าคุณไม่ต้องการทำ "% 1" ดังนั้นหาก% 1 มีช่องว่างจะมีเครื่องหมายคำพูดอยู่ภายใน% 1 และช่องว่างนั้นจะถูกเก็บไว้แล้ว
ฉันขีดด้านล่างตามความคิดเห็นของ supercat และฉันเพิ่มมากขึ้นในโพสต์ของฉันด้านบน
เครื่องหมายคำพูดนั้นดีที่สุดประมาณ% 1 แทนที่จะเป็น [] หรือตัวละครบางตัวเช่น A หรือ - เพราะตัวอย่างเช่นถ้าคุณใช้ [] มันจะไม่รักษาช่องว่าง
C: \ & gt; ถ้า [d a b] == [d a b] echo sdf
a ไม่คาดคิดในเวลานี้
พูด if "d a b"
ที่จะทำงาน ดังนั้น if "%1"
ดีกว่าตัวละครอื่น ๆ ที่ชอบ if [%1]
หรือ a%1a
หรือ -%1
for %1 in (*.*) do @echo %1
และมันจะคลุมเครือที่จะทำเช่นนั้นในไฟล์แบตช์ดังนั้นสำหรับคำสั่งเมื่อภายในไฟล์แบตช์ใช้ %% แต่พารามิเตอร์แบทช์ (ซึ่ง btw ซึ่งเคยเป็นไฟล์แบตช์เท่านั้น) จะเป็น% 1,% 2 ฯลฯ