Eliminar la extensión de un archivo en batch
Resuelto
joujou07
Mensajes publicados
257
Fecha de registro
Estado
Miembro
-
merzouki -
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.
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
-
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. -
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. -
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. -
Hola,
Insertas en tu lote un comando:
REN AAA.txt AAA
--
Cordialmente.
Cchristian. -
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? -
Tengo dificultad para entender esto, ¿puedes precisarlo exactamente cómo debo usarlo? Gracias de todos modos ^^
-
¡Voy a intentar esto de inmediato!
-
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