ถ้าคุณต้องการให้ชื่อ 8.3 และไม่มีอะไรจะแสดงถ้าคุณใช้ "dir / -n" คุณจะได้รับชื่อ 8.3 ที่จุดเริ่มต้นของแต่ละบรรทัด หมายเหตุ: มันแยกส่วนขยายออกจากชื่อไฟล์ด้วยช่องว่างแทนที่จะเป็นจุด
C:\Users\User>dir /-n
Volume in drive C has no label.
Volume Serial Number is 5C60-1B61
Directory of C:\Users\User
. <DIR> 01/28/2015 11:26 PM
.. <DIR> 01/28/2015 11:26 PM
Contacts <DIR> 12/27/2014 04:46 PM
Desktop <DIR> 01/25/2015 05:06 PM
DOCUME~1 <DIR> 01/27/2015 10:20 PM
DOWNLO~1 <DIR> 01/27/2015 10:10 PM
FAVORI~1 <DIR> 12/27/2014 04:46 PM
GOOGLE~1 <DIR> 01/28/2015 02:08 AM
Links <DIR> 01/25/2015 05:06 PM
Music <DIR> 12/27/2014 04:46 PM
Pictures <DIR> 12/27/2014 04:46 PM
SAVEDG~1 <DIR> 12/27/2014 04:46 PM
Searches <DIR> 12/27/2014 04:46 PM
TESTIN~1 TXT 8 01/28/2015 10:32 PM
TESTIN~2 BAT 175 01/28/2015 11:26 PM
TESTIN~1 BAT 164 01/28/2015 11:26 PM
UNIGIN~1 <DIR> 10/28/2014 07:01 PM
Videos <DIR> 12/27/2014 04:46 PM
3 File(s) 347 bytes
16 Dir(s) 3,896,034,717,696 bytes free
แต่คุณสามารถใช้ "dir / -n" ภายในสำหรับลูปในไฟล์แบตช์จากนั้นแยกสตริงย่อยของอักขระ 12 ตัวแรกเพื่อกำจัดส่วนที่เหลือของแต่ละบรรทัด เช่น:
@echo off
setlocal EnableDelayedExpansion
for /f "skip=7 tokens=*" %%i in ('dir /-n ^| find /v "File(s)" ^| find /v "Dir(s)"') do (
set x=%%i
echo !x:~0,12!
)
"skip = 7" ข้าม 7 บรรทัดแรกซึ่งไม่ใช่ไฟล์หรือชื่อไดเรกทอรีและเอาต์พุตของ "dir / -n" ถูกไพพ์ผ่านคำสั่ง find สองคำสั่งเพื่อลบสองบรรทัดสุดท้ายที่สร้างโดย "dir / -n "(สัญลักษณ์ไปป์" | "ต้อง" หนี "โดย" ^ "เนื่องจากการคลายสตริงย่อยเกิดขึ้นใน for for loop ในไฟล์แบตช์จำเป็นต้องใช้" setlocal EnableDelayedExpansion "และ"! "ต้องใช้กับ ตัวแปร x แทนที่จะเป็น "%" สำหรับตัวอย่างข้างต้นคุณจะเห็นผลลัพธ์ต่อไปนี้จากการดำเนินการแบตช์ไฟล์:
C:\Users\User>testing456
Contacts
Desktop
DOCUME~1
DOWNLO~1
FAVORI~1
GOOGLE~1
Links
Music
Pictures
SAVEDG~1
Searches
TESTIN~1 TXT
TESTIN~2 BAT
TESTIN~1 BAT
UNIGIN~1
Videos