Thực thi nhiều lệnh với 1 dòng trong dòng lệnh Windows?


65

Làm cách nào tôi có thể thực thi nhiều lệnh trong dòng lệnh Windows chỉ bằng một dòng?

Vì vậy, ví dụ nói rằng tôi muốn thực hiện cập nhật SVN và sau đó sao chép tất cả các tệp sang vị trí khác ...

svn update; copy *.* c:\development\copy\

Điều đó rõ ràng không hoạt động. Có một ký tự hoặc dấu phân cách như ';' để thực hiện một cái gì đó như thế này?

Câu trả lời:


105

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

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

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


7
&&&chỉ hoạt động trong Windows ' cmd.exe- không phải là DOS.
grawity

22
'DOS' như một thuật ngữ thường được sử dụng để mô tả cmd và khi op sử dụng svn, tôi rất nghi ngờ anh ấy vẫn đang sử dụng DOS. Không cần phải là người phạm tội :)
Phoshi

Có: urlencode.blogspot.com/2009/06/vista-desktop-june-09.html Anh ấy sử dụng Windows XP. Chắc chắn không phải DOS (nó không bao giờ có vẻ tốt;))
Phoshi

8
Tôi nghĩ thật an toàn khi cho rằng khi bất cứ ai đề cập đến "DOS", họ thực sự có nghĩa là "Dấu nhắc lệnh của Windows". Tôi sẽ đi ra ngoài ở đây và nói rằng hầu hết mọi người có thể không sử dụng DOS nhiều trong những ngày này. Cảm ơn đã sửa chữa - nó chỉ là một chút không cần thiết trong thời đại ngày nay.
Murdoch Ripper

@MurdochRipper Ý bạn là gì? Tôi đang xem câu hỏi này trong DOS ngay bây giờ. ;)
Andrew

4

Ít nhất là trong MS-DOS 6.22 tôi đã từng sử dụng khóa Ctrl+ Tđể lấy một loại ký hiệu đoạn văn. Điều này làm việc giống như &được đề cập bởi Phoshi. Điều này sẽ chỉ hoạt động, tuy nhiên, nếu bạn có doskey.exe đang chạy.


4

Nếu bạn muốn thực thi nhiều lệnh với 1 dòng, startví dụ, nơi bạn đang bắt đầu các lệnh với , nếu bạn muốn thực thi một lệnh như thế này:

start "" netsh dump && pause

Sau đó, bạn cần thực hiện theo 2 bước (giải pháp một dòng nằm ở cuối câu trả lời này).

Đầu tiên, viết các lệnh vào một tệp bó tạm thời (trong trường hợp này, bạn có thể sử dụng &hoặc &&):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd

Lưu ý rằng bạn cần "thoát" từng "&"s(ký hiệu) với a "^" để cho phép chúng được coi là các ký tự bình thường trong echolệnh. Ngoài ra, bạn có thể tạo tệp bó tạm thời bằng trình soạn thảo văn bản, chẳng hạn như Notepad.

Sau đó, sử dụng startđể bắt đầu tệp bó:

start "" foobar.cmd
  -or-
start "" "temporary foobar.cmd"


Lưu ý: Cặp dấu ngoặc kép trống dành cho dấu "Title"sẽ được hiển thị trong thanh tiêu đề của cửa sổ lệnh startsẽ mở. Đây "Title"tranh luận là về mặt kỹ thuật một tùy chọn tham số để start, nhưng nó thực sự là cần thiết , nếu lệnh đó startsẽ chạy là dụng dấu ngoặc kép. Chẳng hạn, trong ví dụ thứ hai:

start "" "temporary foobar.cmd"

nếu bạn bỏ qua cặp dấu ngoặc kép trống như thế này:

start "temporary foobar.cmd"

sau đó startsẽ mở một cửa sổ lệnh mới và sử dụng "temporary foobar.cmd"làm cửa sổ lệnh mới "Title"và sẽ không có gì được thực thi trong cửa sổ lệnh mới.)

Nếu bạn muốn startđợi tệp bó hoàn thành (sau khi pausebị loại bỏ), trước khi starthoàn thành, thì bạn cần thêm công /wtắc vào startlệnh:

start "" /w foobar.cmd

Bạn có thể đặt tất cả những thứ này lại với nhau trên một dòng và thậm chí xóa (xóa) tệp bó tạm thời ( foobar.cmd):

echo netsh dump ^&^& pause ^&^& exit>foobar.cmd && start "" /w foobar.cmd && del foobar.cmd
  -or-
echo netsh dump ^& pause ^& exit>foobar.cmd & start "" /w foobar.cmd & del foobar.cmd

Lưu ý rằng nếu bạn định xóa tệp bó tạm thời, bạn cần chạy startbằng công /wtắc, nếu không, tệp bó tạm thời có thể sẽ bị xóa trước khi có cơ hội chạy.


Thay vì /wngười ta có thể đặt một giấc ngủ ngắn trước khi xóa tập tin. timeout 2sẽ làm điều đó, ví dụ.
Antonio

@ kevin-fegan tại sao bạn cần một tập tin cmd tạm thời ???
maxxyme

0

Trong trường hợp bạn muốn bọc lệnh đầu tiên bằng if nhưng vẫn muốn lệnh thứ hai thực thi bất kể sau đó bạn phải bọc if nếu với cmd / c cũng như thế này:

cmd / c nếu tồn tại abc. (nd / q abc) & echo xin chào

Nếu bạn không đặt tiền tố if với cmd / c thì toàn bộ lệnh sẽ trở thành một phần của if (mà bạn có thể không muốn).


Hoặc bạn có thể nói(if exist abc. command₁) & command₂
Scott

@Scott Tôi biết lời khen là một tội lỗi trên các trang web này, nhưng start "" cmd /c "(command₁) & (command₂)"hợp pháp không được trả lời ở bất cứ đâu trên web nhưng là cách duy nhất để liên kết hầu hết các tuyên bố hàng loạt. Chúc mừng bạn.
John Kens

1
Tôi đánh giá cao lời khen / chúc mừng, nhưng tôi không hiểu bạn đang nói gì. user138334 đã nói, trong trường hợp bạn muốn bọc lệnh đầu tiên bằng một lệnh ifnhưng vẫn muốn lệnh thứ hai được thực thi bất kể sau đó bạn phải bọc ifbằng lệnh cmd /chay, và tôi đã trả lời bằng cách thực hiện mà không cần cmd /c. Vậy tại sao bạn nói rằng cách duy nhất để liên kết hầu hết các câu lệnh bó là sử dụng cmd /c? Và tại sao bạn ném startvào hỗn hợp?
Scott

0

sử dụng &!

%command1% & %command2% chạy cả hai lệnh

%command1% && %command2% chạy lệnh đầu tiên, nếu nó hoạt động thì chạy lệnh thứ hai

%command1% || %command2% chạy lệnh đầu tiên, nếu thất bại, hãy chạy lệnh giây

Xem tại đây


Và cũng có thể &, &&||không phải là thực sự là một lệnh, nó là một phần của hàng loạt. Không phải là một lệnh.
KIRBY INHALES U

%command%có thể thực thi chuỗi đó dưới dạng một lệnh, xem tại đây
KIRBY INHALES U

-1

Tôi thấy rằng việc sử dụng 'START' đã cố định nhiều lệnh hoạt động (Tôi đang chạy Windows 10 Home). Ví dụ:

START chrome.exe "page.web.com" & timeout 20

Câu trả lời không nên chứa bình luận, như "Cảm ơn vì điều này", nó làm sao lãng giải pháp của bạn. Bạn nên xem xét việc chỉnh sửa câu trả lời này, vì vậy nó chỉ đơn giản là trả lời câu hỏi, với càng nhiều chi tiết càng nhiều nhưng không có tiếng ồn (tức là lệnh không hoạt động)
Ramhound 7/12/2016

Những gì anh đang tìm kiếm, là &, không start!
NetwOrchestration

Vấn đề gì giải quyết vấn đề này? Điều gì xảy ra khi bạn gõ dòng lệnh mà không có start?
Scott

-2

tạo một tệp bó với một tên ngắn tức là bat.bat .

add cmd /c %1 
    cmd /c %2 
rem

và cứ như vậy đến 9 dòng và lưu lại

sau đó sử dụng nó với dấu ngoặc kép

bat "command one" "command two" "command three" 

cmd /c sẽ chạy từng lệnh và tắt cho dòng tiếp theo, không nói điều này tốt hơn && chỉ đơn giản là nó dễ dàng.

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.