Команда dir командной строки: для отображения только имени файла, в формате 8.3?
Я знаю, что "dir / w" или "dir /b" показывает только имя файла. Хотя "dir /x" или "dir /X" показывает формат 8.3, но вместе показывает всю другую информацию, такую как длинные имена файлов, даты и размер.
можно ли позвонить dir
, который показывает только имена файлов (не показывает даты или размеры) и показывает это в формате 8.3?
5 ответов
for /R %A in (*.*) do @echo %~nsA %~nA
без подкаталога:
for %A in (*.*) do @echo %~nsA %~nA
добавить скрытые файлы:
for /F "tokens=*" %A in ('dir /B/A:-/S *') do @echo %~nsA %~nA
без подкаталога:
for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA
Если вы просто хотите, чтобы отображались имена 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" внутри цикла for в пакетном файле, а затем извлечь подстроку из первых 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" передается через две команды поиска для удаления последних двух строк, созданных "dir /-n" "(символ канала"|"должен быть" экранирован"через"^". Поскольку извлечение подстроки происходит в цикле for в пакетном файле, требуется"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
for %i in (*) do echo %~nsxi
или
for /f "tokens=4" %i in ('dir /a-d /x "%cd%" ^| find "/"') do echo %i
или
for /f "tokens=1,2" %i in ('dir /a-d /-n "%cd%" ^| find "/"') do echo %i.%j
или включить каталоги/папки:
for /f "tokens=4" %i in ('dir /x "%cd%" ^| find "/"') do echo %i
Проверено на Вин 10.
Проиграв с этим час, я придумал следующее:
из DOS подскажите:
for /F "tokens=*" %A in ('dir /B/A:-/S c:\Windows') do (@echo %~sA>> "%temp%\file_list_8dot3.txt")
из.BAT или.CMD файла:
for /F "tokens=*" %%A in ('dir /B/A:-/S c:\Windows') do (@echo %%~sA>> "%temp%\file_list_8dot3.txt")
примечание: у этого скрипта все еще есть проблема с длинными именами файлов, но он продолжит работу и создаст текстовый файл 8dot3, который затем может быть закачан в любой другой пакетный файл.
Ниже приведен весь мой тестовый файл.Bat:
@echo off
cls
set ll=%temp%\file_list_8dot3.txt
if exist "%ll%" del "%ll%"
for /F "tokens=*" %%A in ('dir /B/A:-/S %temp%') do (@echo %%~sA>> "%ll%")
start /wait notepad "%ll%"
if exist "%ll%" del "%ll%"
Чтобы получить список файлов во всех подкаталогах, попробуйте это:
for /d /r %i in (*.*) do dir "%i" /B > %i/test.txt