windows-xp – ¿Cómo extraer una lista completa de tipos de extensión dentro de un directorio?

Pregunta:

Dentro de un directorio, y de forma recursiva dentro de sus subdirectorios, lo que significa que se procesa cada directorio dentro de un directorio, ¿cómo puedo compilar una lista completa de extensiones únicas dentro del directorio?

El sistema operativo es Windows XP con todas las actualizaciones actuales, pero puedo ejecutar un script si puedo saber qué está haciendo, aunque preferiría no tener que instalar dot-net, ya que realmente no me gusta.

Respuesta:

Este script por lotes lo hará.

@echo off

set target=%~1
if "%target%"=="" set target=%cd%

setlocal EnableDelayedExpansion

set LF=^


rem Previous two lines deliberately left blank for LF to work.

for /f "tokens=*" %%i in ('dir /b /s /a:-d "%target%"') do (
    set ext=%%~xi
    if "!ext!"=="" set ext=FileWithNoExtension
    echo !extlist! | find "!ext!:" > nul
    if not !ERRORLEVEL! == 0 set extlist=!extlist!!ext!:
)

echo %extlist::=!LF!%

endlocal

batchfile como cualquier archivo .bat y ejecútelo con el comando batchfile (sustituya el nombre que le haya batchfile ) para listar el directorio actual, o especifique una ruta con el batchfile "path" . Buscará en todos los subdirectorios.

Si desea exportar a un archivo, use batchfile >filename.txt (o batchfile "path" >filename.txt ).

Explicación

Todo antes de la línea for /f... simplemente configura las cosas: obtiene el directorio de destino para buscar, habilita la expansión retardada que me permite actualizar las variables en el ciclo y define una nueva línea ( LF ) que puedo usar para una salida más ordenada. Ah, y %~1 significa "obtener el primer argumento, eliminando las comillas", lo que evita las comillas duplicadas – ¿ver for /? .

El ciclo usa ese comando dir /b /s /a:-d "%target%" , tomando una lista de todos los archivos en todos los subdirectorios debajo del objetivo.

%%~xi extrae la extensión de las rutas completas que devuelve el comando dir .

Una extensión vacía se reemplaza con "FileWithNoExtension", por lo que sabe que existe un archivo de este tipo; si agregué una línea vacía en su lugar, no es tan obvio.

Toda la lista actual si se envía a través de un comando de find , para garantizar la unicidad. La salida de texto del comando de búsqueda se envía a nul , esencialmente un agujero negro, no lo queremos. Dado que siempre agregamos un : al final de la lista, también debemos asegurarnos de que la consulta de búsqueda termine con un : para que no coincida con los resultados parciales; consulte los comentarios.

% ERRORLEVEL% se establece mediante el comando de find , un valor de 0 indica que hubo una coincidencia. Entonces, si no es 0, la extensión actual no está en la lista hasta ahora y debe agregarse.

La línea de eco básicamente salidas, y también reemplazar mis marcadores de posición ( : ) con saltos de línea para que se vea bonito.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım