Команда dir командной строки: для отображения только имени файла, в формате 8.3?


11

Я знаю, что «dir / w» или «dir / b» показывает только имя файла. Хотя «dir / x» или «dir / X» показывает формат 8.3, но вместе показывает всю другую информацию, такую ​​как длинные имена файлов, даты и размер.

Можно ли вызвать dir, что показывает только имена файлов (не показаны даты и размеры), и показывает, что в формате 8.3?

Ответы:


10
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


Как бы я получил, чтобы выкинуть результаты этой первой команды в текстовый файл? Я получаю следующую ошибку: «Запрошенная операция не может быть выполнена для файла с открытым разделом, отображенным пользователем».
bdb484

3

Если вы просто хотите, чтобы отображались имена 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

Nitpick: один или несколько пробелов. Попробуйте создать файл с именем, abc.txtчтобы увидеть это в действии. Затем, для удовольствия, создайте файл с именем abc.docx.
CVN

0

Проиграв с этим час, я придумал следующее:

из 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%"

0

Чтобы получить список файлов во всех подкаталогах, попробуйте это:

for /d /r %i in (*.*) do dir "%i" /B > %i/test.txt

 

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.