Batch Eliminar Doble Extensión (SOLUCIONADO)

Iniciado por kaisersouse2, 17 Septiembre 2014, 16:44 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Cita de: kaisersouse2 en 17 Septiembre 2014, 18:24 PM
funciono de maravilla, puedes explicarme así como para mongolico esa linea y cerrar el tema si puedes

Citar
Código (dos) [Seleccionar]
For /F "Tokens=1-2,* delims=." %%a In ('Dir /B /A "*.encrypted.txt"') DO ()

En el parámetro 'Tokens' especifico que la cadena debe partirse en 3 partes (nombre, .doc, encrypted.txt), la variable %%a contiene el primer token (nombre), la variable %%b contiene el segundo token (.doc), y la variable %%c contiene el resto de la cadena (.encrypted.txt)

Citar
Código (dos) [Seleccionar]
Ren  "%%~fa.%%b.%%c"    "%%~na.%%b"

Creo que esa linea no necesita explicaciones, uso el contenido de las variables (junto a los modificadores ~f y ~n) para especificar su ubicación y renombrar los archivos.

Usa la ayuda del comando si tienes dudas:
Rename.exe /?








kaisersouse2


kaisersouse2

Otra pregunta, lo hago en el mismo tema porque es parte del mismo codigo, como logro eliminar varios archivos de una carpeta excluyendo por ejemplo solo los .encrypted logre solo listarlos  con dir /B/S/A-D | findstr /v "\.encrypted" pero no lo he podido hacer con del, gracias de antemano

Eleкtro

#13
prueba así
Código (DOS) [Seleccionar]
For /F "Delims=*" %%# in ('dir /B /S /A-D "%CD%\*" ^| find /v ".encrypted"') do (
   Echo "%%~f#"
   REM Del /Q "%%~f#"
)


saludos.








kaisersouse2

Excelente solo habia que eliminar el rem, saludos

kaisersouse2

#15
Cita de: Eleкtro en 17 Septiembre 2014, 18:16 PM
@kaisersouse2

No es necesario que me envies un email, usa el tema que abriste para formular preguntas.

Código (dos) [Seleccionar]
@Echo OFF

For /F "Tokens=1-2,* delims=." %%a In ('Dir /B /A "*.encrypted.txt"') DO (
Echo "%%~fa.%%b.%%c" ^> "%%~fa.%%b"
Ren  "%%~fa.%%b.%%c"    "%%~na.%%b"
)

Pause&Exit


Saludos Electro un gusto saludarte a un año de haberme ayudado con el código que me enviaste fue de mucha utilidad, pero como todo cambia incluso mi programa tengo una duda.

En el parámetro 'Tokens' se especifica que la cadena debe partirse en 3 partes (nombre, .doc, encrypted.txt), la variable %%a contiene el primer token (nombre), la variable %%b contiene el segundo token (.doc), y la variable %%c contiene el resto de la cadena (.encrypted.txt) todo esto esta muy bien, pero tengo un problema al tener un archivo con un nombre como por ejemplo: "llave 1.2.pem.encrypted.txt" cuando corre el codigo en vez de eliminar solo el .encrypted.txt me vuela el .pem.encrypted quedando el archivo como
llave 1.2 debiendo quedar llave 1.2.pem, esto es por darte un ejemplo, podría tener un archivo que se llamase loquesea 1.2.1.pem, no se si me explico, podrías ayudarme

Eleкtro

#16
Claro, en ese For utilicé el punto como delimitador asumiendo que el nombre "real" del archivo se puede tokenizar en 2 partes, si desconoces la cantidad de puntos que habrán en los nombres entonces debes recurrir a otra técnica, por ejemplo a un reemplazamiento de string:

Código (dos) [Seleccionar]
@Echo OFF

Set "ext=encrypted.txt"

For %%_ In ("*.%ext%") DO (
Set "filename=%%~nx_"
Call Set "filename=%%filename:.%ext%=%%"
Call Echo "%%~nx_" - "%%filename%%"
Call Ren  "%%~f_"    "%%filename%%"
)

Pause&Exit


Saludos








kaisersouse2

#17
Cita de: Eleкtro en 30 Septiembre 2015, 22:03 PM
Claro, en ese For utilicé el punto como delimitador asumiendo que el nombre "real" del archivo se puede tokenizar en 2 partes, si desconoces la cantidad de puntos que habrán en los nombres entonces debes recurrir a otra técnica, por ejemplo a un reemplazamiento de string:

Código (dos) [Seleccionar]
@Echo OFF

Set "ext=encrypted.txt"

For %%_ In ("*.%ext%") DO (
Set "filename=%%~nx_"
Call Set "filename=%%filename:.%ext%=%%"
Call Echo "%%~nx_" - "%%filename%%"
Call Ren  "%%~f_"    "%%filename%%"
)

Pause&Exit

Saludos, Funciono de maravilla de hecho use un for /r para recursividad para que busque dentro de las carpetas que esten en ese directorio.

Otra cosa podrías como en anteriores ocasiones y también para los que lean esto en un futuro, como funciona el código, así como para dummies. y de nuevo gracias  ;-).

Eleкtro

#18
Cita de: kaisersouse2 en 30 Septiembre 2015, 22:39 PMOtra cosa podrías como en anteriores ocasiones y también para los que lean esto en un futuro, como funciona el código, así como para dummies. y de nuevo gracias  ;-).

Más bien voy a tener que epxlicarte cómo funciona la etiqueta QUOTE, que me estás dando trabajo con eso corrigiendo las citas que haces xD.

El código es muy, muy sencillo, realmente no hay mucho que decir por que no hay nada así complicado, pero lo intentaré:

Primero de nada, establezco la extensión, asignándola a una variable para tener una referencia corta.
CitarSet "ext=encrypted.txt"

Luego, uso un For para iterar los archivos del directorio de trabajo, usando como patrón de búsqueda para los archivos la extensón de antes ("*.encrypted.txt")
CitarFor %%_ In ("*.%ext%") DO ...

La variable de FOR (%%_) no nos sive de mucho ya que no sabemos la cantidad de puntos "." que puede contener un nombre de archivo, así que asigno a una nueva variable el nombre completo incluyendo la extensión:
CitarSet "filename=%%~nx_"

Seguidamente, hago un reemplazamiento de string para eliminar del nombre la extensión que habiamos asignado al principio (".encrypted.txt")
CitarCall Set "filename=%%filename:.%ext%=%%"

Y por último, renombramos el archivo.
CitarCall Ren  "%%~f_"    "%%filename%%"

Nota(s):
- El comando Call es necesario por la expansión de variables, pero se puede reemplazar por el uso de SetLocal EnableDelayedExpansion si uno quiere hacerlo.

- El modificador ~n de la variable de For devuelve el nombre del archivo, el modificador ~x la extensión, y el modificador ~f la ruta absoluta.

Saludos