“ @” หมายถึงอะไรในสคริปต์แบตช์ของ Windows


132

ฉันเห็นว่า@ถูกใช้ในบริบทดังกล่าว:

@echo off

@echo start eclipse.exe

ที่@นี่หมายความว่าอย่างไร?

คำตอบ:


197

หมายความว่าจะไม่ส่งออกคำสั่งที่เกี่ยวข้อง เปรียบเทียบไฟล์แบตช์สองไฟล์ต่อไปนี้:

@echo foo

และ

echo foo

อดีตมีfooผลเป็นเฉพาะในขณะที่พิมพ์หลัง

H:\Stuff>echo foo 
foo

(ที่นี่อย่างน้อย) ดังจะเห็นได้ว่าคำสั่งที่เรียกใช้สามารถมองเห็นได้เช่นกัน

echo offจะปิดสิ่งนี้สำหรับไฟล์แบตช์ที่สมบูรณ์ อย่างไรก็ตามการecho offเรียกตัวเองจะยังคงปรากฏให้เห็น ซึ่งเป็นสาเหตุที่คุณเห็น@echo offในส่วนเริ่มต้นของไฟล์แบตช์ ปิดการสะท้อนคำสั่งและอย่าสะท้อนคำสั่งที่ปิดอยู่

การลบบรรทัดนั้น (หรือแสดงความคิดเห็น) มักเป็นเครื่องมือดีบักที่มีประโยชน์ในไฟล์แบตช์ที่ซับซ้อนมากขึ้นเนื่องจากคุณสามารถดูสิ่งที่เรียกใช้ก่อนที่จะมีข้อความแสดงข้อผิดพลาด


25

หมายความว่า "ไม่ต้องสะท้อนคำสั่งไปยังเอาต์พุตมาตรฐาน"

ค่อนข้างแปลก

echo off

จะส่งecho offไปที่เอาท์พุท! ดังนั้น,

@echo off

ตั้งค่าลักษณะการทำงานของเสียงสะท้อนอัตโนมัตินี้และหยุดการทำงานสำหรับคำสั่งในอนาคตทั้งหมดด้วย

ที่มา: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true


14

@พิการสะท้อนว่าคำสั่งอย่างใดอย่างหนึ่ง ก็ไม่มีecho start eclipse.exeเส้นจะพิมพ์ทั้งตั้งใจstart eclipse.exe และecho start eclipse.exeบรรทัด

echo offจะปิดการสะท้อนคำสั่งโดยค่าเริ่มต้น

ดังนั้นจึง@echo offปิดการสะท้อนคำสั่งอย่างเงียบ ๆ และเอาต์พุตเฉพาะผู้เขียนแบทช์ที่ตั้งใจจะเขียนเท่านั้นที่เขียนจริง


11

สืบทอดความหมายจาก DOS @ :

ใน DOS เวอร์ชัน 3.3 ขึ้นไปซ่อนเสียงสะท้อนของคำสั่งแบตช์ เอาต์พุตใด ๆ ที่สร้างโดยคำสั่งจะถูกสะท้อน

หากไม่มีคุณสามารถปิดการสะท้อนคำสั่งโดยใช้echo offคำสั่งได้ แต่คำสั่งนั้นจะถูกสะท้อนก่อน


ลิงก์เสียแล้ว
ojchase

8

ตามค่าเริ่มต้นไฟล์แบตช์จะแสดงคำสั่งขณะทำงาน จุดประสงค์ของคำสั่งแรกที่ปิด @echoคือปิดการแสดงผลนี้ คำสั่ง "echo off" จะปิดการแสดงผลสำหรับสคริปต์ทั้งหมดยกเว้นคำสั่ง "echo off" เอง เครื่องหมาย "@" ด้านหน้าทำให้คำสั่งใช้กับตัวเองเช่นกัน


3
ฉันไม่เห็นข้อมูลเพิ่มเติมหรือดีกว่าในโพสต์ของคุณเหมือนในโพสต์อื่น ๆ ของ 5 ปี
jeb

5

เวลาที่มีประโยชน์อีกอย่างในการรวม @ คือเมื่อคุณใช้FORในบรรทัดคำสั่ง ตัวอย่างเช่น:

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

บรรทัดก่อนหน้าแสดงสำหรับทุกไฟล์ : พรอมต์ECHOคำสั่งคำสั่งและผลลัพธ์ของECHOคำสั่ง ทางนี้:

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

เพียงแค่แสดงผลลัพธ์ของECHOคำสั่ง


@PsychoData: เป็นเรื่องตลกที่คุณลงคะแนนคำตอบเดียวที่ให้ข้อมูลที่เป็นประโยชน์เพิ่มเติมสำหรับคำตอบอื่น ๆ อีก 4 คำตอบซึ่งในขณะนี้ก็ตอบคำถามในลักษณะเดียวกัน ...
Aacini

6
ฉันลดคะแนนลงเพราะมันไม่ใช่คำตอบสำหรับคำถามของเขา คุณไม่ได้ให้คำอธิบายว่า @ ทำอะไร หากคุณมีตัวอย่างการใช้งานที่ดีเยี่ยม แต่ก็ยังไม่ใช่คำตอบสำหรับคำถามของเขา คุณอาจไม่รู้ด้วยว่าฉันได้เพิ่มคะแนนคำตอบด้วยคำอธิบายการเดิมพันว่ามันทำอะไรและมาจากไหน ฉันไม่ได้ลงคะแนนโดยไม่มีเหตุผล "คำตอบ" ของคุณไม่ใช่คำตอบ มันเป็นคำสั่งที่ค่อนข้างเกี่ยวข้องกัน
PsychoData

2

คุณสามารถรวม @ ใน 'scriptBlock' ดังนี้:

@(
  echo don't echoed
  hostname
)
echo echoed

และโดยเฉพาะอย่าทำอย่างนั้น :)

for %%a in ("@") do %%~aecho %%~a
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.