Eliminar la extensión de un archivo en batch

Resuelto
joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro -  
 merzouki -
Hola,
Esto es lo que me gustaría hacer en batch (línea de comando MS-DOS):
Tengo un archivo machin.mpg

Ejecución de la línea de comando

Me encuentro con un archivo machin

Todo simple.

8 respuestas

  1. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Buenas noches,

    En lo que respecta a la expansión tardía de las variables, solo puedo dirigirle a la ayuda en línea (HELP SET, 2ª pantalla)

    Para el uso del comando, es como lo he escrito, al menos eso creo ya que no lo he utilizado con una variable %%X, por cierto, al buscar me he dado cuenta de que hay una forma más sencilla:

    SET "nombre_sin_extension=%%~nX" (Aquí X es el nombre de tu variable en el bucle FOR) En cada iteración de tu bucle FOR, la variable nombre_sin_extension se rellenará con el nombre de los archivos sin la extensión.

    Encontrarás las explicaciones en la ayuda en línea (HELP FOR 2ª pantalla), reproduzco una parte:

    Además, la sustitución de referencias de variables FOR ha sido mejorada.
    Ahora puedes utilizar la siguiente sintaxis opcional:

     %~I - expande %I eliminando las comillas (") %~fI - expande %I a un nombre de ruta reconocido %~dI - expande %I a la letra de la unidad únicamente %~pI - expande %I a la ruta únicamente %~nI - expande %I al nombre del archivo únicamente %~xI - expande %I a la extensión del archivo únicamente %~sI - ruta expandida que contiene únicamente nombres cortos %~aI - expande %I a atributos del archivo %~tI - expande %I a la fecha/hora del archivo %~zI - expande %I al tamaño del archivo %~$PATH:I - recorre los directorios de la variable de entorno PATH y expande %I al nombre del primer archivo reconocido encontrado. Si el nombre de la variable de entorno no está definido o el archivo no se encuentra en la búsqueda, entonces este modificador expande a cadena vacía Puedes combinar los modificadores para obtener resultados compuestos: %~dpI - expande %I a la letra de la unidad y ruta únicamente %~nxI - expande %I al nombre del archivo y extensión únicamente %~fsI - expande %I al nombre de ruta completo con nombres cortos únicamente %~dp$PATH:i - recorre los directorios listados en la variable de entorno PATH buscando %I y expande a la letra de la unidad del primero encontrado.

    --
    Atentamente.

    Cchristian.
    12
  2. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Te he hecho un pequeño trasto para ilustrar mis palabras ...............

     SETLOCAL ENABLEdelayedExpansion SETLOCAL ENABLEextensions CLS echo. CD C:\Documents and Settings\Christian\Mis documentos\BATCH_files rem para mi prueba : FOR %%X IN (aaa.txt) DO ( FOR %%X IN (*.*) DO ( SET "nombre_sin_extension=%%~nX" REN "%%X" "!nombre_sin_extension!.flv" ) ENDLOCAL


    --
    Cordialmente.

    Cchristian.
    3
  3. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Buenas tardes,

    Este comando chaineZ:~0,-%n% debería solucionar tu problema:

    Ejemplo:
     SET chaineZ=abcABC123ABCabc echo --------------------------------------------------------------------------- . echo Comando: "echo %%chaineZ:~0,-%n%%%" echo Extracción de todos los c. de la cadena %chaineZ% excepto los %n% últimos. echo El resultado es: !chaineZ:~0,-%n%! echo --------------------------------------------------------------------------- . Resultado: --------------------------------------------------------------------------- . Comando: "echo %chaineZ:~0,-4%" Extracción de todos los c. de la cadena abcABC123ABCabc excepto los 4 últimos. El resultado es: abcABC123AB --------------------------------------------------------------------------- .


    En tu caso prueba esto. Atención a la expansión retardada que debes poner en línea (!!):
    SETLOCAL ENABLEdelayedExpansion @for %%X in (*.*) do ( SET var_temp=%%%X:~0,-4% ren "%%X" !var_temp! ENDLOCAL

    Atentamente.

    Cchristian.
    2
  4. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Hola,

    Insertas en tu lote un comando:

    REN AAA.txt AAA


    --
    Cordialmente.

    Cchristian.
    0
  5. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    Sí, veo, pero en realidad aquí está la parte de mi programa en cuestión

    @for %%X in (*.*) do (
    ren "%%X" "%%X.flv"
    )

    Utilizo un bucle FOR, así que si uso tu comando, será como si fuera

    ren machin.mpg machin.mpg.flv

    Entonces, siempre hay ese .mpg, ¿hay alguna solución para quitarlo incluso si ya se renombró a flv?
    0
  6. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    Tengo dificultad para entender esto, ¿puedes precisarlo exactamente cómo debo usarlo? Gracias de todos modos ^^
    0
  7. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    ¡Voy a intentar esto de inmediato!
    0
  8. joujou07 Mensajes publicados 257 Fecha de registro   Estado Miembro 45
     
    Muchas gracias a ti, Christian, sin embargo, el %%~nX no se guardó en la variable con SET, pero he solucionado el problema utilizándolo directamente en una línea de comando como esta

    echo %%~nX
    0
    1. cchristian Mensajes publicados 928 Estado Miembro 131
       
      Hola,

      Gracias por la respuesta, hasta pronto.


      --
      Atentamente.

      Christian.
      0
    2. merzouki
       
      bns
      ¿Cómo puedo usar un bucle for para eliminar solo los archivos txt que se encuentran en una carpeta con otros archivos de diferentes extensiones?
      0