Iniciar sesión

Ver la versión completa : msdos quitar doble extensión



akualung
04/08/2009, 13:50
Hola, comunidad. Tengo un problemilla con una cosa que estoy haciendo en msdos. Se trata de un programa batch que comprime todos los archivos de una determinada carpeta, usando el programa zip de linea de comandos.

Lo de comprimir lo hago bien, lo malo es que me conserva las extensiones de los archivos originales. Es decir, el archivo "hola.txt" se me convierte, una vez comprimido, en "hola.txt.zip", el "algo.xls" en "algo.xls.zip", etc...

¿Cómo lo podría hacer para que al comprimirlo no me haga esa doble extensión y que me ponga solo nombreArchivo.zip?

He probado a, por cada archivo que comprimo (ya que es un bucle -for- que va comprimiendo archivo por archivo) poner otra instrucción adicional que me lo renombre, pero no me funciona. Los archivos son mayoritariamente txt, pero puede haber otros con cualquier extensión.

Lo he intentado de varias maneras, por ejemplo:

ren *.*.zip *.zip

ren *.???.zip *.zip

ren *.zip *.zip

Y así ad nauseam con infinitas combinaciones, pero ninguna tira. Ya se me han acabado las ideas, si alguien sabe cómo hacerlo se lo agradeceré esta vida y dos o tres reencarnaciones más.

kraight
04/08/2009, 14:33
y en las opciones del programa para comprimir no te viene ninguna para renombrar al crear el *.zip , pega el codigo del bucle y lo que te devuelva el comando help con el programa compresor para ver las opciones, alguna forma tiene que haber fijo.




Saludos

akualung
04/08/2009, 14:50
hola, Kraight, gracias por interesarte. Mira, el help de la aplicación que uso (el programa zip.exe para linea de comandos, bajado de http://stahlforce.com/dev/index.php?tool=zipunzip) es este:

Copyright (c) 1990-2006 Info-ZIP - Type 'zip "-L"' for software license.
Zip 2.32 (June 19th 2006). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
The default action is to add or replace zipfile entries from list, which
can include the special name - to compress standard input.
If zipfile and list are omitted, zip compresses stdin to stdout.

-f freshen: only changed files

-u update: only changed or new files

-d delete entries in zipfile

-m move into zipfile (delete files)

-r recurse into directories

-j junk (don't record) directory names

-0 store only

-l convert LF to CR LF (-ll CR LF to LF)

-1 compress faster

-9 compress better

-q quiet operation

-v verbose operation/print version info

-c add one-line comments

-z add zipfile comment

-@ read names from stdin

-o make zipfile as old as latest entry

-x exclude the following names

-i include only the following names

-F fix zipfile (-FF try harder)

-D do not add directory entries

-A adjust self-extracting exe

-J junk zipfile prefix (unzipsfx)

-T test zipfile integrity

-X eXclude eXtra file attributes

-! use privileges (if granted) to obtain all aspects of WinNT security

-R PKZIP recursion (see manual)

-$ include volume label

-S include system and hidden files

-e encrypt

-n don't compress these suffixes

kraight
04/08/2009, 14:56
a lo mejor puedes solucionarlo con -m (-m move into zipfile (delete files)), creas primero un archivo zip vacio y con ese comando metes los archivos dentro del zip , van a ser 2 lineas mas de codigo pero deberia quedarte elegante tal y como querias :brindis:

kounch
04/08/2009, 15:51
Hola

Si tienes en una variable el nombre del archivo .zip, puedes hacer algo como

for /f "tokens=1,2,3 delims=." %%a in ('echo %archivo%') do set nombre=%%a&set ext1=%%b&set ext2=%%c

Así, si la variable archivo fuera "hola.txt.zip", tendrias

nombre=hola
ext1=txt
ext2=zip

Por lo tanto, ahora podrías hacer algo como

ren %nombre%.%ext1%.%ext2% %nombre%.zip
Claro que esto sólo te funcionará si todos los archivos tienen una y sólo una extensión.

Un saludo
kounch

SplinterGU
04/08/2009, 16:33
aca tenes el codigo



@echo off
for %%f in (*) do zip "%%~nf.zip" "%%f"

kounch
04/08/2009, 16:49
aca tenes el codigo



@echo off
for %%f in (*) do zip "%%~nf.zip" "%%f"

¡Ojo! Esto funciona excepto si tienes un archivo .zip en el mismo directorio, entonces te genera exactamente el mismo nombre para el archivo.

SplinterGU
05/08/2009, 07:55
exacto... se supone que eso no deberia pasar...

dardo
05/08/2009, 10:34
No se puede renombrar con comodines bajo la consola de MSDOS o el cmd de WIndows.

Si que se puede renombrar en bucle un solo fichero cada vez.

chipan
05/08/2009, 10:36
con el winrar puedes comprimir chorrocientos archivos en un zip diferente cada uno.
Los seleccionas, boton derecho añadir al archivo, eliges el tipo de compresión y luego en las pestañas superiores seleccionas ficheros y marcas la opcion colocar cada fichero en archivos separados.

akualung
05/08/2009, 11:28
Hola de nuevo. Muchísimas gracias a todos por vuestras respuestas. Ayer "desaparecí" porque al final me salió otra cosa más urgente y tuve que dejar lo del zip aparcado.

Chipan, esa es la idea que tuve al principio, el problema es que se trata de algo que lo han de utilizar unos clientes y por eso ha de ser algo muy "autocontenido", sin instalar nada (porque ademas no sabemos si pueden instalar soft en esos ordenadores) y que solo sea haciendo un paso, porque es un procedimiento que es posible que lo tengan que ejecutar varias (bastantes) veces al día. Por eso uso el zip de linea de comandos, para que solo sea ejecutar un archivo bat y ya está. Así solo es llamar a un exe y el bat hace todo el trabajo.

De hecho, el código del bat que escribí es tan sencillo como esto:

@ECHO OFF

for %%f in (Descomprimido/*) DO zip.exe -j Comprimido/%%f.zip Descomprimido/%%f

El ejecutable está un nivel por encima de las carpetas "comprimido" y "descomprimido". Al cliente le llegarán unos ficheros, con la extensión que sea (aunque creo que mayoritariamente serán txt) y los moverá a la carpeta "descomprimido". Ejecutará el bat, que cogerá todos los ficheros de esa carpeta y los comprimirá en la carpeta "comprimido". El -j era para que no me guarde dentro del zip la ruta completa del archivo original.

*Grabo y sigo editando el mensaje, que como me pete el navegador pierdo todo lo que he puesto*

Pues eso, probaré la solución que me da SplinterGU, y como segunda medida probaría con la de Kounch. Por cierto, SplinterGU, ¿qué significa ese "~n" que hay dentro del primer argumento de la orden zip? ¿Tal vez es algún tipo de expresión regular que venga a significar "no incluyas la extensión", o algo así?

Ya os diré qué tal me ha ido. Muchas gracias de nuevo.