tra-loi-cau-hoi-phat-trien-web.com

Làm cách nào để chạy hai lệnh trong một dòng trong Windows CMD?

Tôi muốn chạy hai lệnh trong bảng điều khiển Windows CMD.

Trong Linux tôi sẽ làm như thế này

touch thisfile ; ls -lstrh

Làm thế nào nó được thực hiện trên Windows?

740
flybywire

Giống như điều này trên tất cả các hệ điều hành Microsoft từ năm 2000 và vẫn còn tốt cho đến ngày nay:

dir & echo foo

Nếu bạn muốn lệnh thứ hai chỉ thực thi nếu lệnh đầu tiên thoát thành công:

dir && echo foo

Cú pháp ampersand (&) duy nhất để thực thi nhiều lệnh trên một dòng sẽ quay trở lại Windows XP, Windows 2000 và một số phiên bản NT trước đó. (Ít nhất 4.0, theo một người bình luận ở đây.)

Có khá nhiều điểm khác về điều này mà bạn sẽ thấy khi cuộn xuống trang này.

Dữ liệu lịch sử sau đây, cho những người có thể tìm thấy nó mang tính giáo dục.

Trước đó, cú pháp && chỉ là một tính năng của 4DOS thay thế Shell trước khi tính năng đó được thêm vào trình thông dịch lệnh của Microsoft.

Trong Windows 95, 98 và ME, bạn sẽ sử dụng ký tự ống thay thế:

dir | echo foo

Trong MS-DOS 5.0 trở lên, thông qua một số phiên bản Windows và NT trước đó của trình thông dịch lệnh, dấu tách lệnh (không có tài liệu) là ký tự 20 (Ctrl + T) mà tôi sẽ đại diện cho ^ T ở đây.

dir ^T echo foo
1005
djdanlib

Một trích dẫn từ tài liệu:

Sử dụng nhiều lệnh và ký hiệu xử lý có điều kiện

Bạn có thể chạy nhiều lệnh từ một dòng lệnh hoặc tập lệnh bằng các ký hiệu xử lý có điều kiện. Khi bạn chạy nhiều lệnh với các ký hiệu xử lý có điều kiện, các lệnh ở bên phải của ký hiệu xử lý có điều kiện dựa trên kết quả của lệnh ở bên trái của ký hiệu xử lý có điều kiện. 

Ví dụ, bạn có thể chỉ muốn chạy một lệnh nếu lệnh trước đó không thành công. Hoặc, bạn có thể muốn chạy lệnh chỉ khi lệnh trước thành công.

Bạn có thể sử dụng các ký tự đặc biệt được liệt kê trong bảng sau để truyền nhiều lệnh.

  • & [...]
    command1 & command2
    Sử dụng để phân tách nhiều lệnh trên một dòng lệnh. Cmd.exe chạy lệnh đầu tiên và sau đó là lệnh thứ hai.

  • && [...]
    command1 && command2
    Sử dụng để chạy lệnh sau && chỉ khi lệnh trước biểu tượng thành công. Cmd.exe chạy lệnh đầu tiên, và sau đó chỉ chạy lệnh thứ hai nếu lệnh đầu tiên hoàn thành thành công. 

  • || [...]
    command1 || command2
    Sử dụng để chạy lệnh sau | | chỉ khi lệnh trước | | thất bại Cmd.exe chạy lệnh đầu tiên và sau đó chỉ chạy lệnh thứ hai nếu lệnh đầu tiên không hoàn thành thành công (nhận được mã lỗi lớn hơn 0).

  • ( ) [...]
    (command1 & command2)
    Sử dụng để nhóm hoặc lồng nhiều lệnh.

  • ; or ,
    command1 parameter1;parameter2
    Sử dụng để tách các tham số lệnh.

519
Raihan

& là Bash tương đương với ; (lệnh chạy) và && là Bash tương đương với && (chỉ chạy các lệnh trước đó khi không gây ra lỗi).

65
manojlds

Bạn có thể sử dụng & để chạy từng lệnh một. Ví dụ: c:\dir & vim myFile.txt

23
scrappedcola

Nếu bạn muốn tạo một phím tắt cmd (ví dụ trên máy tính để bàn của bạn), tham số add/k (/ k có nghĩa là giữ,/c sẽ đóng cửa sổ):

cmd /k echo hello && cd c:\ && cd Windows
16
TroodoN-Mike

Bạn có thể sử dụng gọi để khắc phục vấn đề biến môi trường được đánh giá quá sớm - ví dụ:.

set A=Hello & call echo %A%
11
SSi

Một số ký hiệu xử lý có thể được sử dụng khi chạy một số lệnh trên cùng một dòng và có thể dẫn đến xử lý chuyển hướng trong một số trường hợp, thay đổi đầu ra trong trường hợp khác hoặc chỉ thất bại. Một trường hợp quan trọng là đặt trên cùng một dòng lệnh thao tác các biến.

@echo off
setlocal enabledelayedexpansion
set count=0
set "count=1" & echo %count% !count!

0 1

Như bạn thấy trong ví dụ trên, khi các lệnh sử dụng biến được đặt trên cùng một dòng, bạn phải sử dụng mở rộng trễ để cập nhật giá trị biến của mình. Nếu biến của bạn được lập chỉ mục, hãy sử dụng lệnh CALL với công cụ sửa đổi %% để cập nhật giá trị của nó trên cùng một dòng:

set "i=5" & set "arg!i!=MyFile!i!" & call echo path!i!=%temp%\%%arg!i!%%

path5=C:\Users\UserName\AppData\Local\Temp\MyFile5
6
sambul35

Vì vậy, tôi đã cố gắng kích hoạt tác vụ cụ thể là chạy RegAsm (đăng ký hội) từ menu ngữ cảnh. Vấn đề tôi có là kết quả sẽ sáng lên và biến mất trước khi tôi có thể đọc nó. Vì vậy, tôi đã thử chuyển sang Pause, nó không hoạt động khi lệnh không thành công (như đã đề cập ở đây Lệnh tạm dừng không hoạt động trong tập lệnh .bat và ở đây Lệnh Batch tệp PAUSE không hoạt động ). Vì vậy, tôi đã thử cmd /k nhưng điều đó khiến cửa sổ mở ra cho nhiều lệnh hơn (tôi chỉ muốn đọc kết quả). Vì vậy, tôi đã thêm một pause theo sau là exit vào chuỗi, dẫn đến kết quả như sau:

cmd /k C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe "%1" /codebase \"%1\" & pause & exit

Điều này hoạt động giống như một bùa mê - RegAsm chạy trên tệp và hiển thị kết quả của nó, sau đó "Nhấn phím bất kỳ để tiếp tục ..." Dấu nhắc được hiển thị, sau đó cửa sổ Dấu nhắc đóng lại khi nhấn phím.

P.S. Đối với những người khác có thể quan tâm, bạn có thể sử dụng các mục nhập tệp .reg sau đây để thêm liên kết dllfile vào các tệp dll và sau đó là phần mở rộng lệnh RegAsm cho điều đó (chú ý dấu ngoặc kép thoát và dấu gạch chéo ngược):

[HKEY_CLASSES_ROOT\.dll]
"Content Type"="application/x-msdownload"
@="dllfile"

[HKEY_CLASSES_ROOT\dllfile]
@="Application Extension"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm]
@="Register Assembly"

[HKEY_CLASSES_ROOT\dllfile\Shell\RegAsm\command]
@="cmd /k C:\\Windows\\Microsoft.NET\\Framework\\v4.0.30319\\regasm.exe \"%1\" /codebase \"%1\" & pause & exit"

Bây giờ tôi có một menu chuột phải đẹp để đăng ký một hội.

5
SNAFUBAR

cmd /c ipconfig /all & Output.txt

Lệnh này thực thi lệnh và mở tệp Output.txt trong một lệnh

5
dpp.2325

Để thực thi hai lệnh cùng một lúc, bạn phải đặt ký hiệu & (dấu và) giữa hai lệnh. Thích như vậy:

color 0a & start chrome.exe

Chúc mừng!

3
PryroTech

Tôi cố gắng có hai ping trong cùng một cửa sổ và đó là một lệnh nối tiếp trên cùng một dòng. Sau khi hoàn thành cái đầu tiên, chạy lệnh thứ hai.

Giải pháp là kết hợp với start /b trên lệnh Windows 7 Prompt.

Bắt đầu như bình thường, không có /b và khởi chạy trong một cửa sổ riêng.

Lệnh được sử dụng để khởi chạy trong cùng một dòng là:

start /b command1 parameters & command2 parameters

Dù sao đi nữa, nếu bạn muốn phân tích đầu ra, tôi không khuyên bạn nên sử dụng điều này . Tôi nhận thấy đầu ra bị xáo trộn giữa đầu ra của các lệnh.

3
sdcxp

Chà, bạn có hai tùy chọn: Đường ống hoặc chỉ &:

DIR /S & START FILE.TXT

Hoặc là,

tasklist | find "notepad.exe"

Đường ống (|) là nhiều hơn để lấy đầu ra của một lệnh và đặt nó vào một lệnh khác. Và (&) chỉ nói chạy cái này, cái kia. 

3
PyDever

Không, cd / && tree && echo %time%. Thời gian lặp lại là lúc lệnh đầu tiên được thực thi.

Đường ống có một số vấn đề, nhưng nó không quan trọng miễn là mọi người biết nó hoạt động như thế nào.

1
notarealname

Khi bạn cố gắng sử dụng hoặc thao tác các biến trong một dòng hãy cẩn thận với nội dung của chúng! Ví dụ. một biến như sau

PATH=C:\Program Files (x86)\somewhere;"C:\Company\Cool Tool";%USERPROFILE%\AppData\Local\Microsoft\WindowsApps;

có thể dẫn đến nhiều rắc rối không thể khắc phục nếu bạn sử dụng nó dưới dạng %PATH%

  1. Các dấu ngoặc đơn kết thúc chấm dứt tuyên bố nhóm của bạn
  2. Dấu ngoặc kép không cho phép bạn sử dụng %PATH% để xử lý vấn đề dấu ngoặc đơn
  3. Và một biến được tham chiếu như %USERPROFILE% sẽ chứa gì?
0
V15I0N

Thêm một ví dụ: Ví dụ: khi chúng tôi sử dụng hệ thống xây dựng gulp, thay vì

gulp - mặc định> xây dựng

gulp build - xây dựng thư mục xây dựng

gulp watch - bắt đầu xem tập tin

gulp dist - xây dựng thư mục dist

Chúng tôi có thể làm điều đó với một dòng:

cd c:\xampp\htdocs\project & gulp & gulp watch
0
Mile Mijatovic

Có, có. Nó là &.

&& sẽ thực thi lệnh 2 khi lệnh 1 hoàn thành với điều kiện không thành công.

& sẽ thực hiện bất kể.

Thật đơn giản: chỉ phân biệt chúng với các dấu &&. Thí dụ: 

echo Hello World && echo GoodBye World

Goodbye World sẽ được in sau Hello World.

0
Rajan Dhanowa