Windows: Làm thế nào để xác định lệnh multiline trên dấu nhắc lệnh?


170

Làm thế nào để chúng tôi mở rộng một lệnh để dòng tiếp theo?

về cơ bản, cửa sổ thay thế cho linux là gì

ls -l \
/usr/

Ở đây chúng tôi sử dụng dấu gạch chéo ngược để mở rộng lệnh trên dòng tiếp theo

những gì tương đương cho các cửa sổ?


+1 cho Hỏi và Đáp ngắn gọn và ngắn gọn, khám phá thêm về xử lý dấu mũ tại stackoverflow.com/questions/69068/
mẹo

Câu trả lời:


295

Sau khi thử hầu hết mọi phím trên bàn phím của tôi:

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

C:\Users\Tim\Desktop>

Vì vậy, nó có vẻ là chìa khóa ^.


13
Microsoft không thể tuân thủ các tiêu chuẩn của riêng mình để điều này không hoạt động trong PowerShell. PowerShell tương đương với ^ là `So C: \ Users \ Tim>
cd`

3
@RicJafe Tại sao nên? PowerShell hoàn toàn riêng biệt! Khóa tương đương cho PS là `.
WhatIsHeDaging 14/11/17

Bất cứ ý tưởng về những gì nó là trong powershell?
Ryan

3
@RyanSeanWattrus Sử dụng cùng một phương pháp rất khoa học: `(mộ mộ)
Timbo

57

Trong Windows Command Prompt, ^được sử dụng để thoát ký tự tiếp theo trên dòng lệnh. (Giống như \được sử dụng trong chuỗi.) Các ký tự cần được sử dụng trong dòng lệnh vì chúng phải có ^ tiền tố cho chúng, do đó đó là lý do tại sao nó hoạt động cho dòng mới.

Để tham khảo các ký tự cần thoát (nếu được chỉ định làm đối số lệnh và không nằm trong dấu ngoặc kép) là: &|()

Vì vậy, tương đương với ví dụ linux của bạn sẽ là ( Thêm? Là một dấu nhắc):

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

15
Ký tự '^' phải là ký tự cuối cùng trong dòng. Mặt khác, nếu bạn có SPACE ở cuối, lệnh multiline không hoạt động.
Dmytro Ovdiienko

6

Ký tự dấu mũ hoạt động, tuy nhiên dòng tiếp theo không nên bắt đầu bằng dấu ngoặc kép. ví dụ: điều này sẽ không hoạt động:

C:\ ^
"SampleText" ..

Bắt đầu dòng tiếp theo mà không có dấu ngoặc kép (không phải là một ví dụ hợp lệ, chỉ để minh họa)


1

Nếu bạn đến đây để tìm câu trả lời cho câu hỏi này nhưng không chính xác theo cách OP có nghĩa là, làm thế nào để bạn có được nhiều dòng CMD hoạt động trong một dòng duy nhất , tôi có một câu trả lời nguy hiểm cho bạn.

Cố gắng sử dụng điều này với những thứ thực sự sử dụng đường ống, như nói findstrlà khá có vấn đề. Cùng đối phó với elses. Nhưng nếu bạn chỉ muốn một lệnh điều kiện nhiều dòng thực thi trực tiếp từ CMD và không thông qua một tệp bó, thì điều này sẽ hoạt động tốt.

Giả sử bạn có một cái gì đó như thế này trong một lô mà bạn muốn chạy trực tiếp trong dấu nhắc lệnh:

@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"
    )
)

Bây giờ, bạn có thể sử dụng carat tiếp tục dòng ( ^) và gõ thủ công như thế này, nhưng cảnh báo, thật tẻ nhạt và nếu bạn làm phiền, bạn có thể học lại niềm vui khi gõ lại tất cả.

Vâng, nó sẽ không làm việc với chỉ ^nhờ vào cơ chế thoát bên trong ngoặc nhún vai Ít nhất không phải là bằng văn bản. Bạn thực sự sẽ cần phải tăng gấp đôi số carat như vậy:

@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"))

Thay vào đó, bạn có thể là một người viết lén lén bẩn thỉu từ phía sai của các bản nhạc không cần carat bằng cách hoán đổi chúng cho một ống ( |) trên mỗi vòng lặp / biểu thức:

@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"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.