กำลังหาวิธีการแก้ปัญหาในการพิมพ์ pathes ภายในpathตัวแปรในหน้าต่าง Command-Line ฉันมาถึงนี้การแก้ปัญหา คำตอบคือคำสั่งนี้:
echo %path:;=&echo.%
ตอนนี้ฉันสงสัยว่ามันทำงานอย่างไร
กำลังหาวิธีการแก้ปัญหาในการพิมพ์ pathes ภายในpathตัวแปรในหน้าต่าง Command-Line ฉันมาถึงนี้การแก้ปัญหา คำตอบคือคำสั่งนี้:
echo %path:;=&echo.%
ตอนนี้ฉันสงสัยว่ามันทำงานอย่างไร
คำตอบ:
นั่นเป็นทางออกที่น่าสนใจที่ฉันไม่เคยเห็นมาก่อน ให้ฉันพยายามอธิบาย:
echo %path%หากต้องการพิมพ์เส้นทางทั้งหมดใช้ นี้จะพิมพ์ไดเรกทอรีทั้งหมดในบรรทัดเดียวคั่นด้วยเครื่องหมายอัฒภาค ( ;)%path:a=b%ซึ่งจะแทนที่aอักขระทั้งหมดด้วยbecho. ถูกใช้เพื่อพิมพ์บรรทัดใหม่&ใช้เพื่อแยกคำสั่งเช่นecho line1&echo line2จะพิมพ์สองบรรทัด;ด้วยไม่มีอะไรเลยแล้วพิมพ์บรรทัดใหม่' ฉันไม่พบเอกสารใด ๆ เกี่ยวกับเรื่องนี้ดังนั้นมันเป็นเพียงการตีความของฉัน ตรงไปตรงมาฉันไม่ได้รู้ว่าเป็นไปได้ แต่มีคุณไป UPDATEตีความของฉันของขั้นตอนนี้ดูเหมือนว่าจะออกไปและจะมีการอธิบายที่ดีขึ้นโดยwizzwizz4echo path? %% ใช้สำหรับตัวแปรอย่างไร
set greeting=Hello เกิดความecho %greeting%สับสนPATHเกิดขึ้นกับทั้งคำสั่งและตัวแปรดังนั้นการพิมพ์คำสั่งpathหรือecho %path%จะให้ผลลัพธ์เดียวกัน
$PATHเป็นต้น
echo.ไม่ใช่ "คำสั่งเพื่อพิมพ์บรรทัดใหม่" นี่คือแปลคำสั่งของ Microsoftสำหรับ Windows NT, cmd; และecho.เป็นเพียงคำสั่งที่จะพิมพ์เป็นองค์ประกอบเส้นทางการสร้างความมั่นใจว่าถ้าองค์ประกอบเส้นทางจะว่างก็ไม่ได้สลับไปที่อื่น ๆechoการทำงานของ ครั้งแรกที่echoควรจะเป็นจริงecho.เกินไป
นี่คือการใช้การทดแทนตัวแปรบรรทัดคำสั่ง %path:;=&echo.%หมายถึง " %path%แต่แทนที่ทั้งหมด;ด้วย&echo." ซึ่งหมายความว่าด้วยset path=C:\Windows\System32;C:\Windows\;;C:\Python37;:
echo %path:;=&echo.%
กลายเป็น:
echo C:\Windows\System32&echo.C:\Windows\&echo.&echo.C:\Python37&echo.
เนื่องจาก&เป็นตัวคั่นคำสั่งจึงเท่ากับ:
echo C:\Windows\System32
echo.C:\Windows\
echo.
echo.C:\Python37
echo.
เนื่องจาก quirks ของ DOS Batch echo.เหมือนกันecho ยกเว้นเมื่อไม่มีอะไรเกิดขึ้นหลังจากนั้น หากเป็นเช่นนั้นมันจะไม่พิมพ์อะไรเลยแทนที่จะบอกคุณว่าECHOเปิดหรือปิดอยู่ สิ่งนี้จะทำให้ผลลัพธ์:
C:\Users\wizzwizz4> echo %path:;&echo.%
C:\Windows\System32
C:\Windows\
C:\Python37
C:\Users\wizzwizz4>
จริง ๆ ควรecho.%path:;=&echo.%พิจารณากรณีที่%PATH%เริ่มต้นด้วย a ;แต่คำสั่งนี้ค่อนข้างฉลาดอยู่แล้ว
การเดินทางเข้า detalias ละเอียดจริงๆ ควรจะนำมาใช้แทนecho( echo.นี่เป็นเพราะecho.อาจมีปัญหาเมื่อคุณมีไฟล์ชื่อechoและช้าเพราะมันต้องตรวจสอบดิสก์ ( %CD%และฉันคิดว่าทั้งหมด%PATH%) ทุกครั้งที่มันทำงาน (ฉันไม่มีสำเนา Windows ดังนั้นฉันจึงไม่สามารถตรวจสอบด้วยตนเองได้มันเป็นเพียง%CD%หรือที่ใดก็ตาม%PATH%ที่การปรากฏตัวของechoไฟล์จะส่งผลกระทบecho.และสิ่งนี้จะทำอย่างไร)
echo)แต่ฉันจำไม่ได้จริงๆ ;-(
echo.เป็นสิ่งที่ผู้คนเคยหมุนเวียนกันมากที่สุดเมื่อหลายปีก่อน มันเป็นหนึ่งในหนังสือหลายเล่ม ประสิทธิภาพไม่ใช่ปัญหา พฤติกรรมแปลกประหลาดเมื่อมีไฟล์ต่าง ๆ เกิดขึ้นคือ เมื่อฉันเขียนการแทนที่ 32 บิตสำหรับ 16 บิตcmdใน OS / 2 การแตกชื่อคำสั่งที่อักขระเครื่องหมายวรรคตอนและพฤติกรรมการแยกวิเคราะห์ที่ผิดปกติอย่างมากนี้เป็นหนึ่งในสิ่งที่ฉันตั้งใจไม่ได้ทำซ้ำและฉันใส่เอกสารไว้ รายการความแตกต่าง ฉันสร้างechodotคำสั่งภายนอกแทนซึ่งสามารถใช้นามแฝงได้echo.ตามต้องการ
echo(เป็นรุ่นที่ปลอดภัยเท่านั้น
echo.อาจจะไม่ทำงาน