Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: kaisersouse2 en 17 Septiembre 2014, 16:44 pm



Título: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: kaisersouse2 en 17 Septiembre 2014, 16:44 pm
Buenos días, tengo un detalle con un código de desencriptación que tengo en un batch, resulta que en la salida me genera un lote de archivos de tipo:

Archivo1.doc.encrypted.txt
Archivo2.doc.encrypted.txt
Archivo3.doc.encrypted.txt
.
.
Archivon.doc.encrypted.txt

El tema es que necesito una linea que me elimine el .encrypted.txt de todos los archivos que encuentre en esa ruta y me deje solo el nombre de el archivo con su extensión inicial.

Saludos y gracias de antemano


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: daryo en 17 Septiembre 2014, 16:59 pm
crea un archivo .bat en la carpeta donde esten los archivos y le pones

Código
  1. @echo off
  2. for /F "tokens=1,2,3,4 delims='.'" %%a in ('dir /B *.encrypted.txt') do (move %%a.%%b.%%c.%%d %%a.%%b)


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: Eleкtro en 17 Septiembre 2014, 17:03 pm
Batch Eliminar Doble Extensión

Hola

Solo para dejar claro una cosa, en realidad los archivos tienen 1 sola extensión (que es: .txt), el resto que podriamos considerar extensiones (.doc, .encrypted) no lo son, eso se considera contenido del nombre del archivo (contenido con puntos) y por ende es imposible reconocerlos como extensiones de manera eficiente.

Pero, como conoces exactamente la cadena que quieres eliminar y también conoces cuantas palabras con puntos son, la tarea es bien facil:

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje

Parece que ya te contestaron :P

Saludos.


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: kaisersouse2 en 17 Septiembre 2014, 17:52 pm
crea un archivo .bat en la carpeta donde esten los archivos y le pones

Código
  1. @echo off
  2. for /F "tokens=1,2,3,4 delims='.'" %%a in ('dir /B *.encrypted.txt') do (move %%a.%%b.%%c.%%d %%a.%%b)

me dice que la sintaxis no es correcta, help me please



[MOD]: No está permitido hacer doble post.


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: daryo en 17 Septiembre 2014, 17:56 pm
si ejecutas directamente el comando en ves de ponerlo en un archivo .bat y abrirlo cambia las %%a por %a las %%b por %b y asi con todos


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: kaisersouse2 en 17 Septiembre 2014, 18:13 pm
que tal daryo sigue sin funcionar, apoyame con eso necesito el pez no la caña jajaja, necesito que lea todos los
Archivo1.doc.encrypted.txt
Archivo2.doc.encrypted.txt
Archivo3.doc.encrypted.txt
.
.
Archivon.doc.encrypted.txt

dentro de una carpeta y me elimine .encrypted.txt esos 14 caracteres y me deje por ejemplo solo:

Archivo1.doc
segui tus instrucciones al pie de la letra y no corrio


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: 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
  1. @Echo OFF
  2.  
  3. For /F "Tokens=1-2,* delims=." %%a In ('Dir /B /A "*.encrypted.txt"') DO (
  4. Echo "%%~fa.%%b.%%c" ^> "%%~fa.%%b"
  5. Ren  "%%~fa.%%b.%%c"    "%%~na.%%b"
  6. )
  7.  
  8. Pause&Exit

Saludos.


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: kaisersouse2 en 17 Septiembre 2014, 18:19 pm
Disculpa bro soy nuevo en este tema de los foros


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: Eleкtro en 17 Septiembre 2014, 18:20 pm
Disculpa bro soy nuevo en este tema de los foros

ok, no pasa nada :P

¿te funcionó el código?

saludos


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: 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


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: Eleкtro en 17 Septiembre 2014, 18:33 pm
funciono de maravilla, puedes explicarme así como para mongolico esa linea y cerrar el tema si puedes

Citar
Código
  1. 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
  1. 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:
Código:
Rename.exe /?


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: kaisersouse2 en 17 Septiembre 2014, 20:14 pm
muchisimas gracias hermano


Título: Re: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: kaisersouse2 en 17 Septiembre 2014, 21:21 pm
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


Título: Re: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: Eleкtro en 17 Septiembre 2014, 21:56 pm
prueba así
Código
  1. For /F "Delims=*" %%# in ('dir /B /S /A-D "%CD%\*" ^| find /v ".encrypted"') do (
  2.    Echo "%%~f#"
  3.    REM Del /Q "%%~f#"
  4. )

saludos.


Título: Re: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: kaisersouse2 en 18 Septiembre 2014, 14:42 pm
Excelente solo habia que eliminar el rem, saludos


Título: Re: Batch Eliminar Doble Extensión (Ayuda)
Publicado por: kaisersouse2 en 30 Septiembre 2015, 21:27 pm
@kaisersouse2

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

Código
  1. @Echo OFF
  2.  
  3. For /F "Tokens=1-2,* delims=." %%a In ('Dir /B /A "*.encrypted.txt"') DO (
  4. Echo "%%~fa.%%b.%%c" ^> "%%~fa.%%b"
  5. Ren  "%%~fa.%%b.%%c"    "%%~na.%%b"
  6. )
  7.  
  8. 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


Título: Re: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: 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
  1. @Echo OFF
  2.  
  3. Set "ext=encrypted.txt"
  4.  
  5. For %%_ In ("*.%ext%") DO (
  6. Set "filename=%%~nx_"
  7. Call Set "filename=%%filename:.%ext%=%%"
  8. Call Echo "%%~nx_" - "%%filename%%"
  9. Call Ren  "%%~f_"    "%%filename%%"
  10. )
  11.  
  12. Pause&Exit

Saludos


Título: Re: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: kaisersouse2 en 30 Septiembre 2015, 22:39 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
  1. @Echo OFF
  2.  
  3. Set "ext=encrypted.txt"
  4.  
  5. For %%_ In ("*.%ext%") DO (
  6. Set "filename=%%~nx_"
  7. Call Set "filename=%%filename:.%ext%=%%"
  8. Call Echo "%%~nx_" - "%%filename%%"
  9. Call Ren  "%%~f_"    "%%filename%%"
  10. )
  11.  
  12. 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  ;-).


Título: Re: Batch Eliminar Doble Extensión (SOLUCIONADO)
Publicado por: Eleкtro en 30 Septiembre 2015, 23:03 pm
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  ;-).

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.
Citar
Código:
Set "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")
Citar
Código:
For %%_ 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:
Citar
Código:
Set "filename=%%~nx_"

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

Y por último, renombramos el archivo.
Citar
Código:
Call 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