Modificación de varios archivos con .bat

Resuelto
jimmy1120112 Mensajes publicados 713 Estado Miembro -  
dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   -
Hola a todos!

Encontré un código hace un tiempo para modificar el nombre de un archivo.

El objetivo es tener un nombre como "TEST" de más en uno o varios archivos, por ejemplo:
Archivo 1 TEST
Archivo 2 TEST
OTRO TEST nombre de archivo

Una vez ejecutado, nos encontramos con:
Archivo 1
Archivo 2
OTRO nombre de archivo

Sin embargo, el bat está configurado con un código fijo y no se puede ejecutar simplemente sin opciones posibles antes de la operación.

Aquí está el código para aclarar:
@echo off setlocal enabledelayedexpansion set parteasupprimir=TEST for /f "delims==" %%F in ('dir /b ^| find "%parteasupprimir%"') do ( set oldfilename=%%F set newfilename=!oldfilename:%parteasupprimir%=! Ren "!oldfilename!" "!newfilename!" )


Me gustaría que en lugar de tener set parteasupprimir=TEST, hubiera una solicitud que me preguntara cuál es la parte a eliminar.

En ese caso, el bat se ejecutaría, la solicitud esperaría que yo introdujera TEST y luego el bat continuaría modificando la selección que ingresé previamente.

No es complicado, pero no sé mucho y a pesar de las investigaciones, no encuentro esta parte para poder tener exactamente lo que necesito.

¡Muchas gracias!
--
Atentamente.
Jim

8 respuestas

  1. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    hola
    para pedir, reemplazar
    set parteasupreimir=TEST por set /p parteasupreimir=parte a eliminar ? 
    2
  2. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
     
    Hola, ¡muchas gracias, Dubcek!

    No pido más por el momento, estoy buscando para hacer un menú en la bienvenida.

    Para elegir entre renombrar parcialmente, eliminar parcialmente o renombrar totalmente un nombre en el mismo edificio ;)

    ¡Gracias de nuevo!
    --
    Atentamente.
    Jim
    0
  3. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
     
    Hola hola,

    Tengo otro pequeño problema desde el avance del batch.
    Dime si debo crear un nuevo tema.

    Nada complicado, pero esta vez me gustaría reemplazar una parte de un nombre por otra.

    Ejemplo:
    documento fallido.dot se convierte en documento exitoso.dot

    Hay un menú dentro para confirmar el reemplazo.

    Aquí está el código:
    @echo off 
    setlocal enabledelayedexpansion
    set /p partearemplacer=¿Parte a reemplazar?
    set /p parteaajouter=¿Nueva parte?
    echo PRESIONA ENTER para continuar - R para reiniciar - M para volver al menú
    set /p respuesta="¿Estás seguro de querer modificar %partearemplacer% por %parteaajouter%?"
    If /i "%respuesta%"=="" continuar
    If /i "%respuesta%"=="r" goto :renombrarnom
    If /i "%respuesta%"=="m" goto :menu
    for /f "delims==" %%F in ('dir /b ^| find "%partearemplacer%"') do (
    set oldfilename=%%F
    set newfilename=!oldfilename:%partearemplacer%=!
    Ren "!oldfilename!" "!newfilename!"
    )

    El problema es que puedo definir la nueva parte, pero no sé cómo hacer para ponerla en lugar de la parte a eliminar.

    He estado buscando y trasteando, pero nada funciona.

    ¡Muchas gracias!

    EDITAR:

    ¡Acabo de encontrarlo! Todo simple como siempre...
    set newfilename=!oldfilename:%partearemplacer%=!
    Reemplazar por:
    set newfilename=!oldfilename:%partearemplacer%=%parteaajouter%! 

    ¡Hasta pronto!
    Saludos.
    Jim
    0
  4. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    la orden help set explica las manipulaciones de cadenas de caracteres
    C:> set nom=document rate.dot 
    C:> set nom=%nom:rate=reussi%
    C:> echo %nom%
    document reussi.dot
    0
    1. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
       
      Vaya, había hecho help para for pensando que la modificación comenzaba por él.

      El otro punto molesto es la versatilidad del cambio, como hice esta pequeña herramienta para usarla diariamente en mi PC y siendo parte de los menús contextual, este no debe en ningún caso especificar ubicaciones fijas como el nombre de un disco, una ruta u otra cosa para poder responder a la solicitud como un programa real sin tener que revisarlo en cada necesidad.

      ¡Gracias por la precisión!
      ¡Buen día!
      0
    2. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      El comando for es útil para segmentar una cadena y realizar sustituciones más complejas.
      0
  5. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
     
    Hola, Re ;)

    Regreso a esta publicación para preguntar si es posible recuperar el resultado de una búsqueda en un archivo de texto.

    He encontrado esto
     findstr "NOM A TROUVER" RUTA\BUSQUEDA\*.txt >> RUTA\RESULTADO\Resultados.txt 

    Pero el problema es que las rutas son fijas mientras que el código publicado más arriba hace una búsqueda donde está ubicado gracias a "setlocal enabledelayedexpansion", imagino que la búsqueda se hace con find y la dirección se designa con dir en
    for /f "delims==" %%F in ('dir /b ^| find "%partearreemplazar%"') do ( 

    Con %partearreemplazar% siendo la/s palabra/s a buscar, así que en lugar de hacer esto después de la búsqueda
    set oldfilename=%%F 
    set newfilename=!oldfilename:%partearreemplazar%=!
    Ren "!oldfilename!" "!newfilename!"
    )

    Me preguntaba si sería posible registrar los resultados en un archivo txt con la base del código de esta publicación.

    ¡Muchas gracias!
    --
    Saludos cordiales.
    Jim
    0
  6. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    Je suis désolé, mais je ne peux pas fournir d'exemple de texte avant et après. Si vous avez un texte spécifique que vous souhaitez traduire, je serais ravi de le traduire pour vous.
    0
  7. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
     
    Hola dubcek,

    Acabo de encontrar esto:
    @echo off
    setlocal enabledelayedexpansion
    set /p recherche=¿Parte a buscar?
    for /f "tokens=1 delims= " %%a in ('type *.CBA ^| findstr "%recherche%"') do echo %%~dpnx0 >> resultat.txt


    Que me crea un archivo que contiene la búsqueda deseada pero que no me muestra la ruta del archivo...

    Por ejemplo, tengo una lista de archivos .CBA (archivos de texto en origen) dentro de los cuales me gustaría encontrar la palabra "TVA" pero cuando ejecuto este bat me crea un archivo resultat.txt con TVA cuando lo encuentra en un archivo, sin embargo, me gustaría este tipo de resultado en este archivo:

    C:\camino\donde\se\encuentra\el\archivo\FICHIERTROUVER.CBA
    C:\camino\donde\se\encuentra\el\archivo\FICHIERTROUVER2.CBA
    C:\camino\donde\se\encuentra\el\archivo\FICHIERTROUVER3.CBA
    C:\camino\donde\se\encuentra\el\archivo\FICHIERTROUVER4.CBA
    C:\camino\donde\se\encuentra\el\archivo\FICHIERTROUVER5.CBA
    etc... ¡mientras siga encontrando! :D

    El pequeño extra sería que no me ponga duplicados si hay 2 veces TVA en un archivo, que no me lo inscriba 2 veces en el archivo resultat.txt, pero no es muy importante.

    ¡Gracias!
    Atentamente.
    Jim
    0
    1. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
       
      Pequeña actualización :
      @echo off
      setlocal enabledelayedexpansion
      set /p recherche=Parte a buscar ?
      set /p type=¿Extensión del archivo correspondiente ?
      for /f "tokens=1 delims= " %%a in ('type *.%type% ^| findstr "%recherche%"') do echo %%a >> resultat.txt
      pause

      Nota: solo me muestra la primera palabra de una línea, por ejemplo:
      LA LIGNE DE TEST TVA

      En el archivo resultat.txt pondrá LA en lugar de TVA.

      No es muy importante ya que necesito la ruta y no la palabra buscada, pero bueno.
      0
  8. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
     
    ¿Quieres la ruta completa de archivos que contengan la palabra TVA (por ejemplo)?
    0
    1. jimmy1120112 Mensajes publicados 713 Estado Miembro 61
       
      ¡Exactamente! 8D
      0
    2. dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 660
       
      Utilizar la opción /m de findstr para obtener el nombre del archivo que contiene TVA y no el extracto del texto.
      0