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?
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
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.
&
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).
Bạn có thể sử dụng & để chạy từng lệnh một. Ví dụ: c:\dir & vim myFile.txt
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
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%
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
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.
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
Để 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!
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.
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.
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.
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%
%PATH%
để xử lý vấn đề dấu ngoặc đơn%USERPROFILE%
sẽ chứa gì?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
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.