¿Cómo puedo enumerar el directorio de varias carpetas en un archivo de texto para cada carpeta individual?

¿Cómo puedo enumerar el directorio de varias carpetas en un archivo de texto para cada carpeta individual?

Tengo varias docenas de carpetas con varios archivos y me preguntaba cómo (o si es posible) hacer eco del contenido de cada carpeta en un archivo de texto usando, por ejemplo,directorio > ÍNDICE.txtcon un archivo por lotes o desde la línea de comando.

Sé que ejecutarFOR /D %A IN (X:\carpetadestino*.*) DO (DIR >> INDEX.TXT "%A\")me da un archivo de texto en el directorio principal con todas las carpetas enumeradas con su contenido, pero ¿puedo crear índices individuales para cada carpeta? ¿O estoy pidiendo demasiado a las secuencias de comandos por lotes?

No estoy seguro si es información crucial, pero estoy ejecutando Windows 10. Cualquier ayuda es muy apreciada.

Respuesta1

No estoy seguro de lo que estás buscando aquí, pero armar esto fue más divertido que trabajar:

@echo off

set "dir=C:\Your\Top\Folder"

del /f /q "%dir%\index.txt"

if exist "%dir%" (
    echo(
    echo Report for:
    echo %dir%
    echo(
    echo Subfolders:
    dir /a:d /o:n /b "%dir%"
    echo(
    echo Files:
    dir /a:-d /o:n /b "%dir%"
    echo(
    echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
)>>"%dir%\index.txt"

for /d /r "%dir%" %%A in (*) do (
    echo(
    echo Report for:
    echo %%A
    echo(
    echo Subfolders:
    dir /a:d /o:n /b "%%A"
    echo(
    echo Files:
    dir /a:-d /o:n /b "%%A"
    echo(
    echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
)>>"%dir%\index.txt"

Naturalmente, puedes conservar/deshacerte/cambiar cualquier parte de esto para que tu archivo de salida tenga el aspecto que deseas, así que esto es solo para darte una idea. Esto establece una dirvariable como su carpeta superior para que podamos cambiar las cosas más fácilmente. Está if existahí solo para obtener el dirresultado de esa carpeta superior; de lo contrario, tenemos un for /d /rcomando que la recorrerá de forma recursiva. El diseño de salida es una preferencia personal basada en lo que encontré más atractivo (sin preocuparme demasiado) para ver después de recorrer esto en varios lugares. Notarás que después de configurar la dirvariable, lo primero que hace el lote es eliminar el archivo de índice para no tener que hacerlo manualmente cada vez que lo verifiqué; de lo contrario, >>seguiré haciendo eco de varias ejecuciones hasta el final. .

Si desea un archivo de índice separado paracadasubcarpeta, todo lo que tienes que hacer es habilitar la expansión retardada y anidar la parte principal del forbucle de esta manera:

setlocal enabledelayedexpansion
for /d /r "%dir%" %%A in (*) do (
    set "name=%%~nA"
    (echo(
    echo Report for:
    echo %%A
    echo(
    echo Subfolders:
    dir /a:d /o:n /b "%%A"
    echo(
    echo Files:
    dir /a:-d /o:n /b "%%A"
    echo(
    echo \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\)>>"%dir%\!name! index.txt"
)

Esto le dará un archivo de texto separado con el nombre de la carpeta ( %%~nA) en el título de cada uno. Si eres vago como yo y quieres eliminar los archivos de índice individualizados antes de ejecutar esto, elnorteEnésima cantidad de veces, puedes lanzar un if exist "%dir%\!name! index.txt" del /f /q "%dir%\!name! index.txt"inmediatamente después de configurar la namevariable en el bucle, que también podría poner en un bloque:

for /d /r "%dir%" %%A in (*) do (
    set "name=%%~nA"
    if exist "%dir%\!name! index.txt" del /f /q "%dir%\!name! index.txt"
    (echo(

Déjame saber si estabas buscando algo totalmente diferente o si esto te resultó útil.

Referencias:directorioypara.

información relacionada