เป็นไปได้หรือไม่ที่จะได้รับ Drive Label โดยใช้ WMIC เท่านั้น


1

ใช้ WMIC ฉันต้องการได้รับเฉพาะฉลากไดรฟ์ตามอักษรระบุไดรฟ์:

for /f "skip=1" %a in ('wmic volume where "Driveletter like '%C%'" get label') do echo %a

ตอนนี้พวกคุณที่เข้าใจบรรทัดคำสั่งของ Windows จะเห็นว่าทำไมสิ่งนี้ไม่ทำงานอย่างที่คาดไว้เพราะฉัน "ทำ" สะท้อนเสียง ดังนั้นการใช้ข้างต้นผลลัพธ์ดูเหมือนดังนี้ (ซึ่งไม่ใช่สิ่งที่ฉันหวัง):

C:\>for /f "skip=1" %a in ('wmic volume where "Driveletter like '%C%'" get label') do echo %a

C:\>echo System
System

C:\>echo
ECHO is on.

เอาต์พุตดิบของคำสั่ง WMIC จะมีลักษณะดังต่อไปนี้:

Label
System

เป้าหมายคือการข้ามบรรทัดแรกเท่านั้น (ทำไมฉันถึงพยายามใช้for /f "skip=1"...) และรับเฉพาะบรรทัดที่สอง อย่างไรก็ตามฉันไม่แน่ใจว่าจะแสดงได้อย่างไรโดยไม่แสดงให้เห็น


โซลูชันจำเป็นต้องใช้wmicหรือไม่ ฉันมีโซลูชันที่ใช้ PowerShell หากมีความช่วยเหลือหรือไม่
Crippledsmurf

คำตอบ:


2

คุณมีสองปัญหา Techie007 ระบุคำสั่งแรก - คุณต้องนำหน้าคำสั่ง DO ด้วย@หากคุณต้องการป้องกันไม่ให้คำสั่งดังกล่าวถูกสะท้อนไปยังหน้าจอ ไม่จำเป็นถ้า ECHO ปิดอยู่

ปัญหาอื่น ๆ เป็นสิ่งประดิษฐ์ที่น่ารำคาญอย่างมากสำหรับวิธีการที่ FOR / F โต้ตอบกับเอาต์พุต Unicode ของ WMIC อย่างไรก็ตามยูนิโค้ดจะถูกแปลงเป็น ANSI อย่างไม่เหมาะสมดังนั้นแต่ละบรรทัดจะลงท้ายด้วย \ r \ r \ n FOR / F หยุดพักที่ \ n และปิดเทอร์มินัลเดียวเท่านั้นทำให้เหลือ \ r ที่ไม่ต้องการเป็นพิเศษ (โปรดทราบว่า \ r แทนอักขระปัดแคร่และ \ na อักขระขึ้นบรรทัดใหม่)

เอาท์พุท WMIC รวมถึงบรรทัดว่างพิเศษในตอนท้าย \ r ที่ไม่ต้องการเป็นพิเศษจะป้องกัน FOR / F จากการไม่สนใจบรรทัด (ไม่เห็นว่าว่างเปล่า) เมื่อคุณสะท้อนคุณค่าที่คุณได้รับECHO is on.

มีหลายวิธีในการจัดการกับสิ่งนี้ แต่สิ่งที่ฉันชอบคือการส่งผ่านผลลัพธ์พิเศษสำหรับ / F เพื่อลบ \ r ที่ไม่ต้องการ

for /f "skip=1 delims=" %a in ('wmic volume where "Driveletter like '%C%'" get label') do @for /f "delims=" %b in ("%a") do @echo %b

ขอขอบคุณ. ฉันไม่ได้สังเกตเห็นถึงการขึ้นรถกลับในตอนท้าย งานนี้เหมือนแชมป์
Beems

1

คำนำหน้าEchoด้วย@สัญลักษณ์เพื่อป้องกันการแสดงคำสั่ง

ie (snipped เพื่อความกะทัดรัด):

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