Nhiều lệnh trên một dòng trong tệp loạt Windows


111

Trong Unix, chúng ta có thể đặt nhiều lệnh trong một dòng như thế này:

$ date ; ls -l ; date

Tôi đã thử một điều tương tự trong Windows:

 > echo %TIME% ; dir ; echo %TIME

Nhưng nó đã in thời gian và không thực hiện lệnh dir.

Làm thế nào tôi có thể đạt được điều này?


Câu trả lời:


181

Sử dụng:

echo %time% & dir & echo %time%

Đây là, từ bộ nhớ, tương đương với dấu chấm phẩy phân tách trong bashvà các shell UNIXy khác.

Ngoài ra còn có &&(hoặc ||) chỉ thực hiện lệnh thứ hai nếu lệnh đầu tiên thành công (hoặc thất bại), nhưng ký hiệu duy nhất và &là những gì bạn đang tìm kiếm ở đây.


Tuy nhiên, điều đó có thể cung cấp cho bạn cùng một thời gian vì các biến môi trường có xu hướng được đánh giá khi đọc hơn là thực thi.

Bạn có thể hoàn thành việc này bằng cách bật tính năng mở rộng bị trì hoãn:

pax> cmd /v:on /c "echo !time! & ping 127.0.0.1 >nul: & echo !time!"
15:23:36.77
15:23:39.85

Điều đó cần thiết từ dòng lệnh. Nếu bạn đang thực hiện việc này bên trong một script, bạn chỉ có thể sử dụng setlocal:

@setlocal enableextensions enabledelayedexpansion
@echo off
echo !time! & ping 127.0.0.1 >nul: & echo !time!
endlocal

Cảm ơn vì câu trả lời. Vấn đề là nó hoạt động một phần. là người đầu tiên và cuối cùng thời gian%% in cùng một lúc ngay cả khi lệnh (ở giữa) phải mất ít nhất 40 giây để hoàn thành (tôi chạy kịch bản của tôi thay vì dir lệnh).
Raghuram

1
Đó là bởi vì các biến môi trường được đánh giá khi lệnh được đọc thay vì được thực thi. Tôi sẽ cập nhật câu trả lời.
paxdiablo

Vấn đề vẫn tiếp diễn. Tập lệnh đang thoát với mã 1. Nhưng vẫn còn tiếng vọng thứ hai in cùng một lúc. Xem op 12: 57: 56.93 Một luồng đã thoát khi 3 luồng đang chạy. 12: 57: 56,93
Raghuram

3
Tôi có xu hướng sử dụng time /t(hoặc echo.|time) thay vì echo %time%để phá vỡ vấn đề.
Joey

1
Bất kỳ ý tưởng làm thế nào để có được% errorlevel% là chính xác trong các cuộc gọi sau?
BradLaney
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.