คำตอบของ DavidPostill นั้นยอดเยี่ยม แต่อาจทำให้ผู้มาใหม่สับสนเล็กน้อย ฉันจะพยายามใช้ถ้อยคำใหม่
%
ไม่ใช่ตัวละครที่สงวนไว้
มันเป็นตัวละครที่มีความหมายพิเศษกับคำสั่งเชลล์ (aka cmd.exe
และcommand.com
)
ความแตกต่างคือ:
- คุณไม่สามารถใช้อักขระที่สงวนไว้เลย (แต่ดูด้านล่าง)
- คุณอาจสามารถใช้อักขระพิเศษและอักขระยกเว้น - ได้โดยไม่ต้องพิมพ์ตามที่เป็น
กล่าวอีกนัยหนึ่งคุณสามารถสร้างไฟล์หรือโฟลเดอร์ที่มี%
ชื่อของพวกเขา คุณสามารถทำได้โดยตรงโดยใช้ windows explorer เนื่องจาก%
ไม่มีความหมายพิเศษ ไม่มีความตั้งใจที่จะป้องกันไม่ให้คุณสร้างไฟล์ดังกล่าวที่คอมมานด์พรอมต์ แต่เนื่องจาก%
มีความหมายพิเศษที่นั่นคุณต้องใช้ไวยากรณ์ที่ระบุไว้ด้านล่างเพื่อสร้างไฟล์ดังกล่าว
BAT-ไฟล์
หากคุณกำลังเขียนไฟล์แบตช์ (* .bat, * .cmd) ซึ่งถูกเรียกใช้งานโดย command command (หรือที่รู้จักในแอพพลิเคชั่นพรอมต์คำสั่ง) เพื่อใช้งานอย่าง%
แท้จริง (เช่นการสร้างไฟล์ด้วย%
ในชื่อและไม่ต้องทดแทน ตัวแปรหรือพารามิเตอร์) คุณต้องพิมพ์%%
แทน
ตัวอย่างเช่น,
- คำสั่ง
echo %windir%
ผลิตผลลัพธ์:c:\windows
- อย่างไรก็ตามคำสั่ง
echo %%windir%%
สร้างเอาต์พุต:%windir%
- และอื่น ๆ : คำสั่ง
echo %%%%windir%%%%
ผลิตผลลัพธ์:%%windir%%
ดังนั้นถ้าคุณบันทึกบรรทัดต่อไปนี้test.bat
และเรียกใช้มันจะสร้างไดเรกทอรีที่ชื่อ%test%
สมบูรณ์ด้วยเครื่องหมายเปอร์เซ็นต์:
md %%test%%
หากไม่มีชื่อตัวแปรtest
คำสั่งถัดไปนี้จะเทียบเท่ากับคำสั่งสุดท้าย - นอกจากนี้ยังสร้างไดเรกทอรี%test%
:
md %test%
... แต่โปรดอย่าทำอย่างนั้นเนื่องจากคำสั่งของคุณจะไม่ทำงานตามที่คุณต้องการเมื่อมีคนสร้างตัวแปรด้วยชื่อนั้น
หากคุณตั้งใจจะใช้คำสั่งfor
ในไฟล์ BAT คุณต้องเพิ่มเป็นสองเท่า%
เพื่อให้มันมีความหมายพิเศษในการfor
สั่งแทนที่จะเป็นเชลล์คำสั่ง:
for %%i in (*.*) do echo %%i
สิ่งนี้จะสร้างรายการไฟล์ในไดเรกทอรีปัจจุบัน (นั่นคือ%%i
มีความหมายพิเศษ) และฉันไม่แน่ใจว่าจะสร้างไฟล์ตามตัวอักษรได้อย่างไร%%i
โดยไม่ต้องใช้%p%
วิธีแก้ปัญหาที่อธิบายไว้ในส่วนถัดไป ( %%%%i
ไม่ทำงานที่นี่)
%
ไม่ใช่อักขระเพียงตัวเดียวที่มีความหมายพิเศษที่พร้อมท์คำสั่ง อื่น ๆ รวมถึง^
, <
, >
, |
, (
, )
, &
, ,!
"
ส่วนใหญ่ (ยกเว้น"
) สามารถหลบหนีได้ - กล่าวคือนำหน้าด้วยอักขระเลี่ยง^
เพื่อแทรกอักขระตามตัวอักษรระงับความหมายพิเศษของมัน ผู้ที่ยังสูญเสียฟังก์ชั่นพิเศษของพวกเขาภายในสตริง doublequoted และรอดด้วยเครื่องหมายทับขวา:"
\"
คาร์เทตบางตัว ( ^
) อาจต้องเพิ่มเป็นสองเท่าภายในสตริงที่มีเครื่องหมายคำพูดสองบรรทัดและจะมีการแทนที่ตัวแปรล่าช้า ( !
ความหมายพิเศษ)
พร้อมรับคำสั่ง
น่าเสียดายที่เมื่อพิมพ์คำสั่งลงในหน้าต่างพรอมต์คำสั่งโดยตรง%
ตัวละครสองเท่าจะสร้าง%%
เช่นวิธีการข้างต้นไม่ทำงานในกรณีนั้น
มีปรากฏเป็นวิธีแก้ปัญหาการใช้ประโยชน์จากการเล่นโวหารในการประมวลผลคำสั่ง - คุณจะได้รับตัวอักษร%
โดยพิมพ์หลังจากที่^
%
วิธีการนั้นไม่สามารถจะเข้าใจผิดได้แม้ว่า: หากชื่อไฟล์ของคุณอยู่ในเครื่องหมายคำพูดคู่^
จะถูกตีความอย่างแท้จริง (และไม่ถูกลบออกเหมือนไม่มีคำพูด)
- คำสั่ง
echo %windir%
ผลิตผลลัพธ์:c:\windows
- คำสั่ง
echo %^windir%
ผลิตผลลัพธ์:%windir%
- คำสั่ง
echo "%^windir%"
สร้างผลลัพธ์: "%^windir%"
(พร้อมพิเศษ^
- ไม่ใช่สิ่งที่เราต้องการ)
ฉันขอแนะนำวิธีแก้ปัญหาอื่นแทน:
- สร้างตัวแปรเช่นนี้
set "p=%"
- ใช้เมื่อ
%p%
ใดก็ตามที่คุณต้องการเครื่องหมายเปอร์เซ็นต์ที่แท้จริง: echo "%p%windir%p%"
ตอนนี้จะสร้างผลลัพธ์:"%windir%"
วิธีแก้ปัญหาแบบเดียวกันนี้สามารถใช้เพื่อfor
รับคำสั่งเปอร์เซ็นต์การลงชื่อเข้าใช้อย่างแท้จริงอย่างไรก็ตามโปรดทราบว่าไม่เหมือนกับไฟล์ BAT เมื่อทำการคีย์for
คำสั่งโดยตรงคุณจะไม่ได้รับเครื่องหมายเปอร์เซ็นต์สองเท่า
อักขระที่สงวนไว้สำหรับระบบไฟล์
ตามปกติคุณจะไม่สามารถสร้างไฟล์หรือไดเรกทอรีที่มีอักขระที่สงวนไว้ดังต่อไปนี้ในชื่อ: /
?
<
>
\
:
*
|
"
, สัญลักษณ์ NULL และอักขระที่มีรหัส 1 ถึง 31; ยัง.
และพื้นที่ไม่สามารถเป็นตัวละครที่ผ่านมา; และชื่อต่อไปนี้ผิดกฎหมาย: com1
com2
com3
com4
com5
com6
com7
com8
com9
lpt1
lpt2
lpt3
lpt4
lpt5
lpt6
lpt7
lpt8
lpt9
con
nul
prn
.
แต่บางข้อ จำกัด เหล่านี้สามารถข้าม prefixing เส้นทางของไฟล์ที่มีเช่นนี้\\?\
\\?\c:\test...\nul
อย่างน้อยไฟล์ที่มีชื่อที่สงวนไว้และไฟล์ที่ลงท้ายด้วย space และ dot สามารถจัดการได้
ยิ่งไปกว่านั้นระบบไฟล์ NTFS นั้นรองรับระบบย่อยหลายระบบเช่น DOS, Windows และ POSIX มันเป็นระบบย่อยของ Windows ที่มีข้อ จำกัด ทั้งหมดข้างต้นในขณะที่ POSIX ห้ามเพียง/
และสัญลักษณ์ NULL เท่านั้น
GNU / Linux OS (ชุดย่อยของ POSIX) สามารถสร้าง (และลบ) ชื่อไฟล์ / ไดเรกทอรีที่ Windows API ส่วนใหญ่ทำงาน (และดังนั้นโปรแกรม windows) จึงไม่สามารถทำงานได้ ใน Windows XP สามารถทำงานกับมันได้โดยติดตั้ง "Services for Unix Subsystem" (SFU) ฟรี; บน Vista และเครื่องมือของบุคคลที่สามที่จำเป็นสำหรับการทำเช่นนั้น ฉันไม่แน่ใจว่าระบบย่อย ubuntu-on-windows10 ใหม่สามารถทำได้หรือไม่
<test>
ตัวอย่างเช่นฉันสามารถสร้างไฟล์ชื่อ ไม่สามารถทำได้โดยใช้ฟังก์ชันการจัดการไฟล์ของ Windows