มีการยกเว้นสำหรับอักขระ '&' ในพรอมต์คำสั่งหรือไม่


11

ฉันกำลังลองสิ่งที่ชอบ:

set pwd = abc&123
echo password %pwd%

ฉันได้รับผล ...

'123' is not recognized as an internal or external command, operable program or batch file. 
password abc

เป็นระบบเช่นนี้หรือมีการหลบหนีสำหรับตัวละครดังกล่าวหรือไม่?


คำตอบ:


9

สิ่งที่คุณต้องทำคือห่อรหัสผ่านของคุณด้วยเครื่องหมายอัญประกาศคู่ดังนี้:

set pwd="abc&123"
echo %pwd%

แจ้งให้เราทราบว่ามันไปอย่างไร


1
ตัวเลือกอื่นที่อาจเป็นที่นิยมในบางสถานการณ์คือset "pwd=abc&123"
Harry Johnston

1
-1 มันน่าตกใจที่มี 5 upvotes ผิดไป Windows ใช้% var% หรือ! var! คุณสามารถทดสอบด้วยตัวเองได้ง่ายๆ $ var อยู่ใน linux ถ้าคุณ echo $ var ใน windows มันก็แค่บอกว่าแท้จริง $ var
barlop

1
@barlop: เมื่อเห็นว่าเป็นอีกบรรทัดหนึ่งที่ตอบคำถามฉันไม่เห็นว่ามันสำคัญ
Harry Johnston

7

ฉันพบว่ามันใช้งานได้ดีที่สุดเมื่อรวมทั้งคำตอบของมาร์ติโนและคำตอบของ mastashake57

set pwd=abc^&123
echo %pwd%

ยังคงล้มเหลวและ

set pwd="abc&123"
echo %pwd%

เพิ่มเครื่องหมายคำพูดลงไป (คุณไม่สามารถลบเครื่องหมายคำพูดที่มีforลูปหรือการเปลี่ยนแปลงสตริงได้เนื่องจากมันจะล้มเหลวอีกครั้งด้วยเครื่องหมายแอมเปอร์แซนด์) ซึ่งไม่ค่อยดีเท่าไหร่

อย่างไรก็ตาม

set "pwd=abc^&123"
echo %pwd%

ทำงานได้อย่างสมบูรณ์แบบ

หวังว่าจะช่วย


+1 โปรดทราบว่าใบนี้กะรัตในตัวแปรสภาพแวดล้อมคือจะกำหนดไปpwd abc^&123ส่วนใหญ่เวลานี้น่าจะเป็นสิ่งที่คุณต้องทำ แต่มันอาจจับคุณออกหากคุณไม่ทราบว่าเกิดอะไรขึ้น
Harry Johnston

@HarryJohnston ฉันต้องแก้ไขข้อผิดพลาดการสะกดของคุณ มันเป็นห่วง btw ฉันรู้ว่า ntcmds.chm กล่าวถึง แต่ใน cmd /? มีการกล่าวถึงเอกสารเกี่ยวกับคาเร็ตที่เป็นตัวละครในการหลบหนีหรือไม่?
barlop

@ Barlop: ดังนั้นมันเป็น; ฉันสับสนกับคำพ้องเสียง ตามกฎทั่วไป/?จะมีการสรุปเท่านั้นไม่ใช่เอกสารที่ครอบคลุม
Harry Johnston

@barlop,? เครื่องหมายรูปหมวกเป็นอักขระที่หลบหนี
Pacerier

@Pierier ใช่แล้ว caret เป็นตัวละครในการหลบหนีไม่มีใครไม่เห็นด้วย และมันบอกว่ามันเป็นตัวหนีใน ntcmds.chm (ntcmds.chm มาพร้อมกับ XP และอยู่ในออนไลน์เทียบเท่าmicrosoft.com/resources/documentation/windows/xp/all/proddocs/... และบางทีในบางวิธี มากขึ้นถึงวันที่ออนไลน์ - อาจคำสั่งเพิ่มเติม) ฉันแค่ถามว่าอยู่ที่ไหนใน /? (ถ้ามีทุกที่) มันบอกว่า
คาเร็ต

7

จากไฟล์วิธีใช้การอ้างอิงบรรทัดคำสั่ง:

เครื่องหมายแอมเปอร์แซนด์ (&), ไปป์ (|) และวงเล็บ () เป็นอักขระพิเศษที่ต้องนำหน้าด้วยอักขระเลี่ยง (^) หรือเครื่องหมายคำพูดเมื่อคุณส่งเป็นอาร์กิวเมนต์

ดูเหมือนว่าการใส่รหัสผ่านทั้งหมดในเครื่องหมายคำพูดจะง่ายกว่าการหลีกเลี่ยงอักขระแต่ละตัวหากมีอักขระมากกว่าสองตัวที่ต้องการการรักษา


และคำพูดอยู่ในคำพูด?
Pacerier

4

สิ่งที่คุณต้องการจริงๆคือ:

set pwd=abc^^^&123
echo %pwd%

หรือ:

set "pwd=abc^&123"
echo %pwd%

คำอธิบาย:

ตั้งแต่&เป็นถ่านพิเศษที่คุณต้องหนีด้วยผลในการ^^&

เล่นจะตั้งค่าตัวแปรค่าset pwd=abc^&123 abc&123หลังจากนั้นถ้าคุณมีการทำงานคุณจะทำงานได้อย่างมีประสิทธิภาพecho %pwd%echo abc&123

ยังecho abc&123ไม่ทำงานตามที่คุณคาดหวังเพราะ&เป็นคนพิเศษ คุณสามารถหลีกเลี่ยงสิ่งนี้ได้โดยเพิ่มเครื่องหมายคำพูด: echo "abc&123"แต่ผลลัพธ์ของคุณจะมีเครื่องหมายคำพูดอยู่ด้วย กล่าวอีกนัยหนึ่งการใช้อัญประกาศไม่ใช่วิธีแก้ปัญหาที่เหมาะสม

สิ่งที่คุณต้องการคือการหลบหนี&ถ่านเมื่อคุณเรียกใช้echoคำสั่ง:

echo abc^&123

abc^&123ดังนั้นตัวแปรต้องมีค่า ในการตั้งค่าตัวแปรให้เป็นค่าabc^&123คุณจะต้องหลีกเลี่ยงตัวอักษรพิเศษ^และ&ทำให้:

set pwd=abc^^^&123

+1 สำหรับการชี้ให้เห็นความจำเป็นที่จะต้องหลบลูกศร
jmcg

ใช้งานได้ดีขอบคุณ อักขระการหลีกเลี่ยงนี้ไม่ได้กล่าวถึงในเอกสารด้วยเหตุผลบางประการdocs.microsoft.com/en-us/windows-server/administr/ …
Sergey Smolnikov
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.