ฉันจะแก้ไขตัวแปรสภาพแวดล้อมด้วยอักขระพิเศษได้อย่างไร


0

การแจ้งของฉันถูกตั้งค่าเป็น$P$_CMD>(โดยมีที่ว่างท้าย) มันใช้งานได้ดี อย่างไรก็ตามvirtualenv 's activate.batมีบรรทัดต่อไปนี้:

set PROMPT=(approot) %PROMPT%

เมื่อฉันเรียกใช้คำสั่งนั้น cmd ก็จะบ่น

The syntax of the command is incorrect.

สิ่งนี้ไม่ได้เกิดขึ้นก่อนที่ฉันจะเปลี่ยนพรอมต์ ฉันได้ลองเพิ่มเครื่องหมายคำพูด (สองครั้ง"และเดี่ยว') รอบ ๆ%PROMPT%แต่นั่นไม่ได้ ฉันจะแก้ไขพรอมต์ใช้ประโยชน์จากค่าเก่าได้อย่างไรเมื่อค่าเก่ามีอักขระพิเศษ?


โปรดทราบว่าปัญหานี้สามารถแก้ไขได้โดยใช้ b $Gแทนการใช้งาน>ในพรอมต์ พิมพ์prompt /?เพื่อดูตัวเลือกทั้งหมด
Andres Riofrio

1
ตามที่ความคิดเห็นของคุณระบุไว้ (คุณควรตอบด้วยตนเอง) คุณไม่ควรใช้อักขระพิเศษตั้งแต่แรก อักขระพิเศษทั้งหมดมีตัวspecial codeสำรอง มันไม่ใช่วิธีแก้ปัญหา แต่เป็นวิธีที่ออกแบบมาให้ทำงาน
บ๊อบ

การแทนที่รหัสพิเศษทำงานกับตัวแปรสภาพแวดล้อมอื่น ๆ ได้หรือไม่?
Andres Riofrio

ไม่สิ่งเหล่านี้มีไว้สำหรับพรอมต์โดยเฉพาะ พวกเขากำลังแปลงเมื่อแสดงพรอมต์เท่านั้น พวกเขาถูกเก็บเป็นรหัส
บ๊อบ

@AndresRiofrio ลองตั้ง a => <- ข้อผิดพลาด ลองตั้ง a = ^> <- ที่ใช้งานได้ แต่ echo% a% ให้ข้อผิดพลาด echo "% a%" ก็ใช้งานได้ แต่ล้อมรอบทุกสิ่งด้วยเครื่องหมายคำพูด
barlop

คำตอบ:


1

ด้วยตัวแปรพรอมต์คุณไม่ควรใช้อักขระพิเศษ ใช้สิ่งspecial codesที่สามารถพบได้prompt /?ทุกครั้งที่ทำได้

ในการตอบกลับความคิดเห็นของคุณ:

กับตัวแปรอื่น ๆ SetLocal EnableDelayedExpansionที่คุณสามารถใช้ จากนั้นอ้างถึงตัวแปรที่มี!s แทน%s

SETLOCAL commandล่าช้าจะทำให้เกิดการขยายตัวของตัวแปรที่จะขยายตัวในเวลาดำเนินการมากกว่าในเวลาที่แยกตัวเลือกนี้เปิดอยู่ด้วย เมื่อการขยายตัวล่าช้าในตัวแปรผลอาจมีการอ้างอิงโดยใช้!variable_name!(นอกเหนือจากปกติ%variable_name%)

เนื่องจากตัวแปรถูกขยายเวลาการประมวลผลและอักขระพิเศษ>(ในกรณีนี้) เป็นพิเศษเฉพาะในเวลาในการแยกวิเคราะห์คุณหลีกเลี่ยงปัญหานี้โดยสิ้นเชิง

ตัวอย่างเช่น:

SetLocal EnableDelayedExpansion

set test=World^>
set test2=Hello !test!

โปรดทราบว่า^เป็นอักขระหลีกเลี่ยงที่อนุญาตให้คุณป้อนอักขระพิเศษ (ตัวแปรจะถูกเก็บเป็นWorld>ดังนั้นถ้าคุณไม่set test=World^^^>นำไปสู่ค่าที่เก็บไว้World^>สิ่งนี้จะไม่ทำงานสำหรับคำถามของคุณ

หนีได้ซับซ้อน ยกตัวอย่างเช่นการตั้งค่าtest2ไปยังตัวอักษร!test!, คุณจำเป็นต้องใช้มิฉะนั้นคุณก็จะได้รับค่าของ^^!test^^! testถ้าฉันต้องการจริง ๆ ฉันปกติเพียงแค่เปลี่ยนจำนวนตัวอักษรยกเว้นจนกว่าจะได้ผลมันง่ายกว่าการพยายามหากฎการแยกวิเคราะห์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.