
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 dir
variable como su carpeta superior para que podamos cambiar las cosas más fácilmente. Está if exist
ahí solo para obtener el dir
resultado de esa carpeta superior; de lo contrario, tenemos un for /d /r
comando 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 dir
variable, 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 for
bucle 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 name
variable 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.