linha de comando do Windows dir comando: para exibir apenas o nome do arquivo, no formato 8.3?


9

Eu sei que "dir / w" ou "dir / b" mostra apenas o nome do arquivo. Enquanto "dir / x" ou "dir / X" mostra o formato 8.3, mas juntos mostram todas as outras informações, como nomes de arquivos de formato longo, datas e tamanho.

é possível chamar dir, que mostra apenas os nomes dos arquivos (não mostra datas ou tamanhos) e mostra isso no formato 8.3?

Respostas:


9
for /R %A in (*.*) do @echo %~nsA %~nA

sem subdiretório:

for %A in (*.*) do @echo %~nsA %~nA

adicione arquivos ocultos:

for /F "tokens=*" %A in ('dir /B/A:-/S *') do @echo %~nsA %~nA

sem subdiretório:

for /F "tokens=*" %A in ('dir /B/A:- *') do @echo %~nsA %~nA

você pode incluir a saída que prova que ele faz isso
barlop

Como eu faria para chutar os resultados desse primeiro comando em um arquivo de texto? Eu recebo o seguinte erro: "A operação solicitada não pode ser executada em um arquivo com uma seção mapeada pelo usuário aberta".
bdb484 31/07

3

Se você deseja apenas que os nomes 8.3 e nada mais sejam exibidos, se você usar "dir / -n", obterá o nome 8.3 no início de cada linha. Nota: separa a extensão do nome do arquivo com um espaço em vez de um ponto.

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

Mas você pode usar o "dir / -n" dentro de um loop for em um arquivo em lotes e extrair uma substring dos 12 primeiros caracteres para se livrar do restante de cada linha. Por exemplo:

@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!
)

O "skip = 7" ignora as 7 primeiras linhas, que não são nomes de arquivo nem diretório, e a saída do "dir / -n" é canalizada através de dois comandos find para remover as duas últimas linhas produzidas por "dir / -n "(o símbolo do pipe" | "precisa ser" escapado "por um" ^ ". Como a extração de substring ocorre em um loop for no arquivo em lotes," setlocal EnableDelayedExpansion "é necessário e"! "precisa ser usado com o variável x em vez de "%". Para o exemplo acima, você veria a seguinte saída ao executar o arquivo em lotes:

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: um ou mais espaços. Tente criar um arquivo nomeado abc.txtpara ver isso em ação. Então, por diversão, crie um arquivo chamado abc.docx.
um CVn 29/01

0

Depois de brincar com isso por uma hora, vim com o seguinte:

from dos prompt:

for /F "tokens=*" %A in ('dir /B/A:-/S c:\Windows') do (@echo %~sA>> "%temp%\file_list_8dot3.txt")

do arquivo .BAT ou .CMD:

for /F "tokens=*" %%A in ('dir /B/A:-/S c:\Windows') do (@echo %%~sA>> "%temp%\file_list_8dot3.txt")

nota: esse script ainda tem problemas com nomes de arquivos longos, mas continuará e criará um arquivo de texto 8dot3 que poderá ser bombeado para qualquer outro arquivo em lote.

A seguir está o meu arquivo .Bat de teste inteiro:

@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

Para listar arquivos em todos os subdiretórios, tente este:

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

 

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.