Nếu bạn chỉ muốn tên 8.3 và không có gì khác được hiển thị, nếu bạn sử dụng "dir / -n", bạn sẽ nhận được tên 8.3 ở đầu mỗi dòng. Lưu ý: nó tách phần mở rộng khỏi tên tệp bằng khoảng trắng thay vì dấu chấm.
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
Nhưng bạn có thể sử dụng "dir / -n" trong vòng lặp for trong tệp bó sau đó trích xuất một chuỗi con gồm 12 ký tự đầu tiên để loại bỏ phần còn lại của mỗi dòng. Ví dụ:
@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" bỏ qua 7 dòng đầu tiên, không phải tệp cũng như tên thư mục và đầu ra của "dir / -n" được dẫn qua hai lệnh find để loại bỏ hai dòng cuối được tạo bởi "dir / -n "(ký hiệu đường ống" | "cần được" thoát "bằng" ^ ". Vì việc trích xuất chuỗi con xảy ra trong một vòng lặp for trong tệp bó," setlocal EnableDelayedExpansion "là cần thiết và"! "cần được sử dụng với biến x thay vì "%". Ví dụ trên, bạn sẽ thấy đầu ra sau đây khi thực hiện tệp bó:
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