Windows: จะระบุคำสั่งหลายบรรทัดบนพรอมต์คำสั่งได้อย่างไร


170

เราจะขยายคำสั่งไปยังบรรทัดถัดไปได้อย่างไร

โดยพื้นฐานแล้วเป็นทางเลือกของ windows สำหรับ linux

ls -l \
/usr/

ที่นี่เราใช้แบ็กสแลชเพื่อขยายคำสั่งในบรรทัดถัดไป

อะไรเทียบเท่ากับ windows?


+1 สำหรับคำถามสั้น ๆ ที่กระชับและกระชับยิ่งขึ้นการสำรวจเพิ่มเติมเกี่ยวกับการจัดการ
คาเร็ต

1
คำซ้ำแบบยาวที่เป็น
247702

คำตอบ:


295

หลังจากลองเกือบทุกคีย์บนแป้นพิมพ์ของฉัน:

C:\Users\Tim>cd ^
Mehr? Desktop

C:\Users\Tim\Desktop>

ดูเหมือนว่าจะเป็นปุ่ม ^


13
Microsoft ไม่สามารถปฏิบัติตามมาตรฐานของตนเองดังนั้นจึงไม่สามารถใช้งานได้ใน PowerShell PowerShell เทียบเท่ากับ ^ คือ `ดังนั้น C: \ Users \ Tim>
cd`

3
@RicJafe ทำไมต้องเป็นเช่นนั้น PowerShell แยกออกจากกันโดยสิ้นเชิง! คีย์ที่เทียบเท่าสำหรับ PS คือ `
WhatIsHeDoing

ความคิดเกี่ยวกับสิ่งที่อยู่ใน PowerShell?
Ryan Ryan

3
@RyanSeanWattrus ใช้วิธีการทางวิทยาศาสตร์ที่เหมือนกันมาก: `(หลุมฝังศพ lentaccent)
Timbo

57

ในพรอมต์คำสั่งของ Windows ^จะใช้เพื่อหลีกเลี่ยงอักขระถัดไปในบรรทัดคำสั่ง (Like \ถูกใช้ในสตริง) อักขระที่ต้องใช้ในบรรทัดคำสั่งเนื่องจากควรมี ^ นำหน้าสำหรับพวกเขาดังนั้นจึงเป็นเหตุผลว่าทำไมมันจึงทำงานกับ newline

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

ดังนั้นตัวอย่างที่เทียบเท่ากับลินุกซ์ของคุณจะเป็น ( ยิ่งการเป็นพรอมต์):

C:\> dir ^
More? C:\Windows

15
อักขระ '^' ควรเป็นอักขระตัวสุดท้ายในบรรทัด มิฉะนั้นถ้าคุณมี SPACE เมื่อสิ้นสุดคำสั่งหลายบรรทัดจะไม่ทำงาน
Dmytro Ovdiienko

6

อักขระคาเร็ตใช้งานได้อย่างไรก็ตามบรรทัดถัดไปไม่ควรเริ่มต้นด้วยเครื่องหมายคำพูดคู่ เช่นนี้จะไม่ทำงาน:

C:\ ^
"SampleText" ..

เริ่มบรรทัดถัดไปโดยไม่มีเครื่องหมายคำพูดคู่ (ไม่ใช่ตัวอย่างที่ถูกต้องเพียงเพื่อแสดงให้เห็น)


1

หากคุณมาที่นี่มองหาคำตอบให้กับคำถามนี้ แต่ไม่ว่าวิธีการ OP หมายคือวิธีการที่คุณจะได้รับหลายสาย CMD ในการทำงานในซิงเกิ้ลสายผมมีการเรียงลำดับของคำตอบที่เป็นอันตรายสำหรับคุณ

การพยายามใช้สิ่งนี้กับสิ่งที่ใช้งานท่ออย่างเช่นพูดfindstrเป็นปัญหามาก เดียวกันจะไปสำหรับการรับมือกับelses แต่ถ้าคุณต้องการให้คำสั่งแบบมีเงื่อนไขหลายบรรทัดดำเนินการโดยตรงจาก CMD และไม่ผ่านไฟล์แบตช์สิ่งนี้จะทำงานได้ดี

สมมติว่าคุณมีสิ่งนี้ในแบตช์ที่คุณต้องการเรียกใช้โดยตรงในพร้อมท์คำสั่ง:

@echo off
for /r %%T IN (*.*) DO (
    if /i "%%~xT"==".sln" (
        echo "%%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file
        echo Dumping SLN file contents
        type "%%~T"
    )
)

ตอนนี้คุณสามารถใช้ carat-line ต่อเนื่อง ( ^) และพิมพ์มันออกมาแบบนี้ด้วยตนเอง แต่เตือนมันน่าเบื่อและถ้าคุณทำผิดพลาดคุณสามารถเรียนรู้ถึงความปิติยินดีที่ได้พิมพ์มันออกมาอีกครั้ง

ดีก็จะไม่ทำงานกับเพียง^ขอบคุณที่หลบหนีกลไกภายในของวงเล็บยักอย่างน้อยไม่ได้เป็นที่เขียน คุณจะต้องเพิ่มกะรัตเป็นสองเท่าดังนี้:

@echo off ^
More? for /r %T IN (*.sln) DO (^^
More? if /i "%~xT"==".sln" (^^
More? echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file^^
More? echo Dumping SLN file contents^^
More? type "%~T"))

แต่คุณสามารถเป็นคนเก็บขยะที่มีเล่ห์เหลี่ยมสกปรกจากด้านที่ไม่ถูกต้องของแทร็กที่ไม่ต้องการกะรัตโดยการเปลี่ยนพวกมันออกเป็นท่อเดียว ( |) ต่อการวนรอบ / นิพจน์ต่อไป:

@echo off
for /r %T IN (*.sln) DO if /i "%~xT"==".sln" echo "%~T" is a normal SLN file, and not a .SLN.METAPROJ or .SLN.PROJ file | echo Dumping SLN file contents | type "%~T"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.