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.

Archivo por lotes de Windows para buscar una palabra y renombrar el archivo

He estado buscando en muchos mensajes diferentes, pero no puedo encontrar un script por lotes que funcione para mí. Tenemos una aplicación que solo produce un archivo llamado SALES.CSV. Esto es lo que parece una de las líneas:

DUNKAN,172225A,11/18/21,2655,11/03/21,11/25/21,1100,"",1,0,"Freight (Distance)",3100,1,-1578.5,FLAEX

Dependiendo de cuál sea la última palabra, necesito que el archivo se llame SALESFLAEX.CSV. Solo hay algunas palabras diferentes para buscar: PREHA, FLAEX y PWGEX. Estas palabras nunca aparecerán en el mismo archivo. Por lo tanto, solo necesito encontrar la palabra que actualmente existe en el archivo.
Encontré este código y lo modifiqué, pero solo funciona para un archivo.

findstr /m “FLAEX” SALES.CSV >Nul
if %errorlevel%==0 (
ren SALES.CSV SALESFLAEX.CSV
)

si %errorlevel%==1 (
echo “FLAEX” no se encontró dentro del archivo Log.txt!
)
pause

¿Alguien tiene un mejor método para hacer esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para cambiar el nombre de los archivos basándose en la última palabra

    Se puede modificar el código existente para recorrer un directorio y cambiar el nombre de todos los archivos que contienen la palabra “SALES” y tienen una de las tres palabras específicas (PREHA, FLAEX, PWGEX) como última palabra.

    Aquí hay un ejemplo de código:

    @echo off
    setlocal EnableDelayedExpansion
    
    for %%f in (SALES*.CSV) do (
        for /f "tokens=*" %%a in ('type "%%f" ^| findstr /R /C:"SALES.* \(PREHA\|FLAEX\|PWGEX\)\.CSV$"') do (
            set "filename=%%~nf"
            set "newname=!filename:SALES=SALES%%a!"
            ren "%%f" "!newname!.csv"
            echo Renamed "!filename!.csv" to "!newname!.csv"
        )
    )
    
    pause
    

    Esto es lo que hace el código:

    • El bucle externo “for” recorre todos los archivos que cumplen el patrón “SALES*.CSV” en el directorio actual.
    • El bucle interno “for” lee el contenido de cada archivo y comprueba si cumple el patrón de “SALES” seguido de una de las tres palabras específicas como última palabra usando expresiones regulares.
    • Si se encuentra una coincidencia, extrae el nombre del archivo sin la extensión y le añade la palabra coincidente, luego cambia el nombre del archivo con el nuevo nombre.
    • La declaración “echo” solamente está ahí para fines de prueba/de depuración.

    Esto debería funcionar para todos los archivos que cumplen el patrón especificado y tienen una de las tres palabras específicas como última palabra.

Comments are closed.