Không có ý nghĩa gì trong những tập lệnh bó của Windows


131

Tôi thấy @được sử dụng trong bối cảnh như vậy:

@echo off

@echo start eclipse.exe

Không gì @có nghĩa là ở đây?

Câu trả lời:


196

Nó có nghĩa là không xuất lệnh tương ứng. So sánh hai tệp bó sau:

@echo foo

echo foo

Cái trước chỉ foolà đầu ra trong khi cái sau in

H:\Stuff>echo foo 
foo

(ở đây, ít nhất). Như có thể thấy lệnh đang chạy cũng có thể nhìn thấy.

echo offsẽ tắt cái này cho tập tin lô hoàn chỉnh. Tuy nhiên, echo offcuộc gọi sẽ vẫn hiển thị. Đó là lý do tại sao bạn nhìn thấy @echo offtrong phần đầu của tệp bó. Tắt lệnh lặp lại không lặp lại lệnh tắt nó.

Xóa dòng đó (hoặc nhận xét nó ra) thường là một công cụ gỡ lỗi hữu ích trong các tệp bó phức tạp hơn vì bạn có thể thấy những gì được chạy trước thông báo lỗi.



14

Các @disable tiếng vang cho rằng một lệnh. Nếu không có nó, các echo start eclipse.exedòng sẽ in cả hai dự định start eclipse.exe các echo start eclipse.exedòng.

Các echo offlượt ra lệnh vang vọng theo mặc định.

Vì vậy, @echo offâm thầm tắt lệnh lặp lại và chỉ xuất ra tác giả lô dự định được viết là thực sự được viết.


11

Nó kế thừa ý nghĩa từ DOS. @ :

Trong phiên bản DOS 3.3 trở lên, ẩn tiếng vang của lệnh batch. Bất kỳ đầu ra được tạo bởi lệnh được lặp lại.

Nếu không có nó, bạn có thể tắt lệnh lặp lại bằng cách sử dụng echo offlệnh, nhưng lệnh đó sẽ được lặp lại trước tiên.


Liên kết hiện đã bị hỏng
ojchase

8

Theo mặc định, một tệp bó sẽ hiển thị lệnh của nó khi nó chạy. Mục đích của lệnh đầu tiên mà @echo tắt là tắt màn hình này. Lệnh "echo off" tắt hiển thị cho toàn bộ tập lệnh, ngoại trừ chính lệnh "echo off". Dấu "tại" "@" ở phía trước làm cho lệnh cũng được áp dụng cho chính nó.


3
Tôi không thể thấy bất kỳ thông tin nào tốt hơn hoặc tốt hơn trong bài viết của bạn, như trong các bài viết 5 năm tuổi khác.
Jeb

5

Một thời gian hữu ích khác để bao gồm @ là khi bạn sử dụng FORtrong dòng lệnh. Ví dụ:

FOR %F IN (*.*) DO ECHO %F

Dòng trước hiển thị cho mọi tệp : dấu nhắc lệnh, ECHOlệnh và kết quả của ECHOlệnh. Cách này:

FOR %F IN (*.*) DO @ECHO %F

Chỉ cần kết quả của ECHOlệnh được hiển thị.


@PologistsoData: Thật buồn cười khi bạn đánh giá thấp câu trả lời duy nhất cung cấp thông tin hữu ích bổ sung cho 4 câu trả lời khác, trong khi đó, đã trả lời câu hỏi theo cách tương tự ...
Aacini

6
Tôi thất vọng vì đó không phải là câu trả lời cho câu hỏi của anh ấy. Bạn thậm chí không đưa ra lời giải thích về những gì @ làm. Nếu bạn có những ví dụ hay về cách sử dụng, thật tuyệt, nhưng nó vẫn không phải là câu trả lời cho câu hỏi của anh ấy. Bạn có thể không biết rằng tôi cũng nêu lên câu trả lời với lời giải thích đặt cược về những gì nó làm và nó đến từ đâu. Tôi không chỉ downvote mà không có lý do. "Câu trả lời" của bạn không phải là một câu trả lời. Đó là một tuyên bố có liên quan.
PsychoData

2

bạn có thể bao gồm @ trong một 'scriptBlock' như thế này:

@(
  echo don't echoed
  hostname
)
echo echoed

và đặc biệt không làm điều đó :)

for %%a in ("@") do %%~aecho %%~a
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.