Obtenga los nombres de archivo de la ruta del directorio o del archivo .txt - Windows

0

Actualmente tengo un FileListGenerator.bat que se ve así:

dir /b /s >>FilesDirectoryList.txt

Devolviendo una lista de directorios de archivos que parecen.

C:\Users\Ben\Desktop\Customers\Customer1
C:\Users\Ben\Desktop\Customers\Customer2
C:\Users\Ben\Desktop\Customers\FileListGenerator.bat
C:\Users\Ben\Desktop\Customers\FilesDirectoryList.txt
C:\Users\Ben\Desktop\Customers\Customer1\Analysys Mason
C:\Users\Ben\Desktop\Customers\Customer1\More
C:\Users\Ben\Desktop\Customers\Customer1\Other
C:\Users\Ben\Desktop\Customers\Customer1\Analysys Mason\Crook _ Hatchet blk white font.psd
C:\Users\Ben\Desktop\Customers\Customer1\More\Crook _ Hatchet lot.png
C:\Users\Ben\Desktop\Customers\Customer1\More\Crook _ Hatchet midd.png
C:\Users\Ben\Desktop\Customers\Customer1\Other\Crook _ Hatchet bigger.png
C:\Users\Ben\Desktop\Customers\Customer1\Other\Crook _ Hatchet botton final.png
C:\Users\Ben\Desktop\Customers\Customer2\Analysys Mason
C:\Users\Ben\Desktop\Customers\Customer2\More
C:\Users\Ben\Desktop\Customers\Customer2\Other
C:\Users\Ben\Desktop\Customers\Customer2\Analysys Mason\LiberalHand-Bld.otf
C:\Users\Ben\Desktop\Customers\Customer2\Analysys Mason\LiberalHand-Rg.ttf
C:\Users\Ben\Desktop\Customers\Customer2\Other\Crook _ Hatchet new font.png

¿Hay alguna forma de ejecutar un script contra el archivo .txt o en la línea de comandos para devolver solo los nombres de los archivos?

Ben Allington
fuente
en PowerShell, sería: gci . | select FullName | out-file .\somefile.txt -force
SimonS
que solo devuelve el nivel superior de los nombres de archivos en las subcarpetas que necesitan también
Ben Allington
entonces solo necesitas agregar -r a gci . entonces es gci . -r | [...] la -r interruptor significa recursivo (por cierto: el . significa el directorio actual, también puede poner una ruta allí en lugar de la . - lo mismo para el . en out-file
SimonS

Respuestas:

1

Intenta esto en la línea de comandos:

for /r %a in (*) do @echo %~nxa >>FilesDirectoryList.txt

En archivo por lotes (necesidad de duplicar los signos de porcentaje):

for /r %%a in (*) do @echo %%~nxa >>FilesDirectoryList.txt

Basado en la respuesta aquí

Andy
fuente
¿Simplemente agregaría dir al inicio para ejecutar desde el directorio actual?
Ben Allington
debe ejecutarse, tal como está, desde el directorio superior desde el que desea buscar. Tanto como lo hiciste con tu dir comando originalmente
Andy
dir (para / r% a en (*) do @echo% ~ nxa) & gt; & gt; test.txt simplemente devuelve: El volumen en la unidad C no tiene etiqueta, Directorio de C: \ ......
Ben Allington
Eliminar la sección del comando dir. No es necesario. He actualizado la publicación con la forma de enviarla a un archivo. Simplemente copia eso en la línea de comandos y ejecútalo. i.imgur.com/CLpLkS3.png
Andy
para / r% a en (*) do @echo% ~ nxa & gt; & gt; test.txt no crea el archivo .txt
Ben Allington
0

Si necesita mostrar SÓLO un determinado tipo de archivo como .txt, .doc, .dll, .exe .etc, puede usar dir Ordena y ajusta los parámetros que necesites.

Aquí hay un ejemplo simple: Supongamos que necesito mostrar una lista de nombres de archivos de texto solo en un directorio. Puedo usar este comando

dir *.txt /b

y se mostrará algo como esto:

file1.txt

file2.txt

file3.txt

file4.txt

... etc

Puede usarlo en un archivo por lotes tal como está, (algo como esto):

@Echo off

:: display a list of *.txt files
dir *.txt /b

o puede expandir el código como desee (algo como esto):

@Echo off

:: save a list of *.txt files into another text file inside C:
dir *.txt /b > C:\results.txt

Depende de tu objetivo y de cómo lo desees.

Puede aprender más sobre la línea de comando DIR desde aquí: https://technet.microsoft.com/en-us/library/cc755121(v=ws.11).aspx

iSR5
fuente
0

En Windows PowerShell, puedes hacer esto.

Sólo los nombres de archivo con ruta completa:

(gci -r | ? {!$_.PsIsContainer}).FullName | Out-File test.txt -Force

Solo los nombres de archivo que muestran solo el nombre y la extensión:

(gci -r | ? {!$_.PsIsContainer}).Name | Out-File test.txt -Force

fuente
¿Puedo convertir esto en un archivo .bat? ¿O algo similar para ejecutarse al hacer clic?
Ben Allington
@BenAllington Puedes poner en un archivo .ps1. (Estos son más avanzados que los archivos por lotes). Por supuesto, si está ejecutando una versión muy antigua de Windows PowerShell, debe abrirla como administrador y emitir el siguiente comando: Set-ExecutionPolicy RemoteSigned Este comando debe ejecutarse una vez en la vida de una computadora.
No hay necesidad de foreach, prefiero seguir mi enfoque en los comentarios.
SimonS
@SimonS Su enfoque en los comentarios es defectuoso. No excluye las carpetas según lo solicitado por el OP. El OP quiere "solo los nombres de los archivos", no los nombres de las carpetas. Además, su enfoque agrega una línea en blanco, una línea "Nombre completo" y luego una línea "--------".
1
No veo ningún problema con el nombre completo ----, eso es solo el estándar de PowerShell. si no quieres que lo haria asi (gci . -r | ? {!$_.PsIsContainer}).Name | out-file .\xyz.txt -force
SimonS