หากคุณอยู่ใน CLI ทำไมไม่ใช้ FOR loop เพื่อ "DO" สิ่งที่คุณต้องการ:
for /F "delims=" %a in ('dir') do @echo %a && echo %a >> output.txt
ทรัพยากรที่ยอดเยี่ยมสำหรับ Windows CMD สำหรับลูป: https://ss64.com/nt/for_cmd.html
กุญแจสำคัญในที่นี้คือการตั้งค่าตัวคั่น (delims) ที่จะแยกเอาท์พุทแต่ละบรรทัดออกเป็นไม่มีอะไร วิธีนี้จะไม่ทำให้ค่าเริ่มต้นของ white-space แตก % a เป็นตัวอักษรตามอำเภอใจ แต่มันถูกใช้ในส่วน "do" ถึงดี ... ทำบางสิ่งบางอย่างกับตัวอักษรที่แยกวิเคราะห์ในแต่ละบรรทัด ในกรณีนี้เราสามารถใช้เครื่องหมายแอมเปอร์แซนด์ (&&) เพื่อรันคำสั่ง echo ลำดับที่ 2 เพื่อสร้างหรือต่อท้าย (>>) ไปยังไฟล์ที่เราเลือก ปลอดภัยกว่าเพื่อรักษาคำสั่ง DO นี้ในกรณีที่มีปัญหาในการเขียนไฟล์อย่างน้อยเราจะนำเสียงก้องไปยังคอนโซลก่อน เครื่องหมาย at (@) ที่อยู่ด้านหน้าของ echo แรกช่วยไม่ให้คอนโซลแสดงคำสั่ง echo เองและเพียงแสดงผลลัพธ์ของคำสั่งที่จะแสดงอักขระใน% a มิฉะนั้นคุณจะเห็น:
echo Volume ในไดรฟ์ [x] คือ Windows
Volume ในไดรฟ์ [x] คือ Windows
UPDATE: / F ข้ามบรรทัดว่างเปล่าและแก้ไขเพียงอย่างเดียวคือกรองเอาท์พุทล่วงหน้าที่เพิ่มอักขระให้กับทุกบรรทัด (อาจมีหมายเลขบรรทัดผ่านการค้นหาคำสั่ง) การแก้ปัญหานี้ใน CLI นั้นไม่รวดเร็วหรือสวย นอกจากนี้ฉันไม่ได้รวม STDERR ดังนั้นนี่คือข้อผิดพลาดในการจับภาพเช่นกัน:
for /F "delims=" %a in ('dir 2^>^&1') do @echo %a & echo %a >> output.txt
การเปลี่ยนเส้นทางข้อความผิดพลาด
เครื่องหมายคาร์เร็ต (^) อยู่ที่นั่นเพื่อหนีสัญลักษณ์หลังจากพวกมันเนื่องจากคำสั่งเป็นสตริงที่ถูกตีความซึ่งต่างจากการพูดให้ป้อนมันโดยตรงบนบรรทัดคำสั่ง