es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Uso específico del bucle doble.

Recientemente les pedí ayuda para una doble condición en un archivo por lotes. Me ayudaron muy bien, pero ahora estoy luchando con un nuevo problema… Estoy tratando de optimizar mi script.

Pregunta anterior (https://stackoverflow.com/questions/69918321/how-to-double-conditions-in-batch-file)

Me gustaría listar todos los archivos con extensión .doc que se encuentren en las sub-carpetas que llevan el nombre de la fecha actual. Creo que estoy cometiendo un error en el uso de este doble bucle.

@echo off
chcp 1252
set Pathname="D:\testDir"
set year=%date:~-4%
set month=%date:~-7,2%
set day=%date:~-10,2%

set logfile=%Pathname%\logs\log.txt

cd %Pathname%
d:

for /D /R %%i in (%year%_%month%_%day%) do (
    for /R %%i %%s in (*.doc) do (
        echo "file : %%s worked and does an output at %time%" >> %logfile%
    )
)

¿Me pueden dar un poco de ayuda? Agradezco su ayuda y consejos.

EDIT: necesito realizar acciones en cada archivo .doc en las carpetas que contienen la cadena YEARMONTHDAY. Pero los archivos .doc también pueden estar ubicados en otros subdirectorios.

Podría ser algo así:

D:\testDir\directory1_2021_11_16\test.doc
D:\testDir\directory1_2021_11_16\test.log
D:\testDir\directory1_2021_11_16\subDirectory1\test.doc
D:\testDir\directory1_2021_11_16\subDirectory1\test.log
D:\testDir\directory1_2021_11_17\test.doc
D:\testDir\directory1_2021_11_17\test.log
D:\testDir\directory1_2021_11_17\subDirectory1\test.doc
D:\testDir\directory1_2021_11_17\subDirectory1\test.log
D:\testDir\directory1_2021_11_17\subDirectory2\test.doc
D:\testDir\directory1_2021_11_17\subDirectory2\test.log
D:\testDir\directory1_2021_11_17\subDirectory2\subSubDirectory1\test.doc
D:\testDir\directory1_2021_11_17\subDirectory2\ubSubDirectory1\test.log
D:\testDir\directoryThatIDontCare\test.doc
D:\testDir\directoryThatIDontCare\test.log
D:\testDir\directoryThatIDontCare\subDirectory1\test.doc
D:\testDir\directoryThatIDontCare\subDirectory1\test.log

¿Alguna solución? ¡Gracias por su tiempo!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que necesitas usar un bucle recursivo para buscar en todos los subdirectorios archivos con la extensión .doc. Puedes usar el siguiente código para lograr esto:

    @echo off
    chcp 1252
    set Pathname="D:\testDir"
    set year=%date:~-4%
    set month=%date:~-7,2%
    set day=%date:~-10,2%
    
    set logfile=%Pathname%\logs\log.txt
    
    cd %Pathname%
    d:
    
    for /D /R %%i in (%year%_%month%_%day%) do (
        for /R %%i %%s in (.doc) do (
            echo "el archivo: %%s funcionó y generó una salida a las %time%" >> %logfile%
        )
        for /R %%i %%s in () do (
            if /I "%%~xS"==".doc" (
                echo "el archivo: %%s funcionó y generó una salida a las %time%" >> %logfile%
            )
        )
    )
    

    Este código debería buscar en todos los subdirectorios los archivos con la extensión .doc y registrarlos en el archivo log.txt.

Comments are closed.