[Resuelto] Conversor de imagenes por lotes [Batch]

Iniciado por Kurono90, 28 Diciembre 2012, 23:10 PM

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

Kurono90

Hola a todos

Miren tengo un problema al crear un batch, hace poco comencé a leer sobre esto y encima soy medio duro (en realidad llego a entender pero a los 5 min me olvido, debo releer y termino haciéndome una ensalada en la cabeza)  :rolleyes:.

Lo que estoy tratando de hacer es lo siguiente:

1- Tengo una carpeta la cual contiene varias carpeta y es dentro de estas sub-carpetas donde se encuentran las imágenes .jpg
2 - Quiero crear otra subcarpeta junto a las otras llamada "Procesados", dentro de esta que se creen la misma cantidad de sub-carpetas y con los mismo nombre que las sub-carpetas que se encuentran un nivel arriba... o sea las que están junto a la carpeta Procesado que cree.
3- Necesito que el batch vaya carpeta por carpeta convirtiendo todas las imágenes .jpg a .png o el que yo quiera y que las guarde en la carpeta del mismos nombres creada en Procesados.

Para la conversión de las imágenes uso un programa llamado ImageMagick que trae todas las librerías y ejecutables necesarios para la manipulacion de imagenes por linea de comandos.
El comando que uso para convertir una imagen individualmente o sea manualmente es:

C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\convert.exe "C:\Users\Kurono\Downloads\G-T07\G-T07\G-71\Capitulo 71 (1).jpg" "C:\Users\Kurono\Downloads\G-T07\G-T07\Procesados\G-71\Capitulo 71 (1).png"

Pero hacer eso con todas las paginas de cada capitulo de un tomo de un manga es un trabajo bastante tedioso, por eso pensé en crear un batch que me hiciera todo el trabajo automático. Lamentablemente a veces tengo que re-convertir algunas imágenes de un tomo y meterlas de nuevo en un zip porque me salta error en el lector de manga de la tablet... es como si las "compatibilizara".

Bueno mi Batch es el siguiente pero no funciona, en algo me debo estar equivocando pero no encuentro como solucionarlo:  :huh:

@echo off
Title Conversor de Manga para la Tablet
echo.
set IM="C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\convert.exe"
echo Dame la ruta de la carpeta raiz del tomo
set /p tomo=
echo.
echo Ok, tus deseos son ordenes.
echo.
dir %tomo% /B > %homepath%\Documents\TEMP.txt
mkdir %tomo%\Procesado
cd %tomo%\Procesado
FOR /F %%1 IN (C:\Users\Kurono\Documents\TEMP.txt) do mkdir %%1
cd %tomo%
for /R %%A in (*.*) do (start /b %IM% "*.jpg" "*ed.jpg") %%A
pause > NUL


Definitivamente no estoy usando bien el ultimo FOR, en donde comenzaría la conversión de imágenes porque el tema de la creación de las carpetas funciona bien ¿como puedo arreglarlo? ¿como lo harían ustedes?

Saludos a todos, gracias de antemano y felices fiestas  ;)

Meine programmen

#1
Tendrias que usar un bucle FOR. Algo asi

@ECHO OFF
SetLocal EnableDelayedExpansion
SET /P RUTA1=Escoja la carpeta con las imagenes
SET /P RUTA2=Escoja la carpeta de salida
cd %RUTA1%
FOR /D /r %%A IN (*) DO (SET A=%%A
md "!A:%RUTA1%=%RUTA2%!")
FOR /R %%B IN (*.*) DO (SET B=%%B
SET C=!B:.jpg=.png!
"C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\convert.exe" "!B!" "!C:%RUTA1%=%RUTA2%!")
pause
exit



Si no entiendes alguna parte del codigo te lo explicare encantado. El codigo lo probe yo mismo, y va a las mil maravillas.

Recuerda que las dos rutas las tienes que poner igual, es decir no puedes poner la primera sin el ultimo \ y la sengunda con el ultimo \, si no dara error.
REMEMBER! Reality is an illusion, the universe is a hologram, BUY GOLD! BYE!!


Eleкtro

Hola,

Mi intención no es quitarle protagonismo al esfuerzo de Meine programmen, pero el code no cumple el requisito principal (Una carpeta "Procesados" por carpeta),
si se tienen 600 carpetas distintas para convertir, luego sería un caos para devolver los archivos convertidos a sus carpetas originales xD.

Te dejo mi versión, por si la necesitas:

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

PUSHD "C:\Directorio raíz de las subcarpetas\" || (Exit /B 1)

For /R %%# in (*.jpg) Do (
Echo [+] "%%~f#"
MKDIR "%%~dp#PROCESADOS" 2>NUL
(Start /W "" "C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\convert.exe" "%%#" "%%~dp#PROCESADOS\%%~n#.png")
REM Utiliza este comando en caso de no funcionar:
REM Start /W /D "C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\" convert.exe "%%#" "%%~dp#PROCESADOS\%%~n#.png"
)

Pause&exit


Saludos








Kurono90

Cita de: Meine programmen en 29 Diciembre 2012, 00:00 AM
Tendrias que usar un bucle FOR. Algo asi

@ECHO OFF
SetLocal EnableDelayedExpansion
SET /P RUTA1=Escoja la carpeta con las imagenes
SET /P RUTA2=Escoja la carpeta de salida
cd %RUTA1%
FOR /D /r %%A IN (*) DO (SET A=%%A
md "!A:%RUTA1%=%RUTA2%!")
FOR /R %%B IN (*.*) DO (SET B=%%B
SET C=!B:.jpg=.png!
"C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\convert.exe" "!B!" "!C:%RUTA1%=%RUTA2%!")
pause
exit



Si no entiendes alguna parte del codigo te lo explicare encantado. El codigo lo probe yo mismo, y va a las mil maravillas.

Recuerda que las dos rutas las tienes que poner igual, es decir no puedes poner la primera sin el ultimo \ y la sengunda con el ultimo \, si no dara error.

¡¡Impresionante!! ¡ muchísimas gracias! funciona a la perfección  ::)

Primero no me andaba porque reemplazaba mal los ***** (asteriscos), no me daba cuenta bien como hacerlo. Es que soy muy novato entonces iba probando alternativas y ninguna me funcionaba, hasta que vi que editaste el batch. Funciona de 10!!

Hay cosas del código que nunca había visto como SetLocal EnableDelayedExpansion y el uso de los signos de ! en las letras de las variables.
Es un código que esta a otro nivel, no quiero imaginar cuanto hubiese tardado yo en lograrlo  :laugh:

Cita de: EleKtro H@cker en 29 Diciembre 2012, 01:21 AM
Hola,

Mi intención no es quitarle protagonismo al esfuerzo de Meine programmen, pero el code no cumple el requisito principal (Una carpeta "Procesados" por carpeta),
si se tienen 600 carpetas distintas para convertir, luego sería un caos para devolver los archivos convertidos a sus carpetas originales xD.

Te dejo mi versión, por si la necesitas:

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

PUSHD "C:\Directorio raíz de las subcarpetas\" || (Exit /B 1)

For /R %%# in (*.jpg) Do (
Echo [+] "%%~f#"
MKDIR "%%~dp#PROCESADOS" 2>NUL
(Start /W "" "C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\convert.exe" "%%#" "%%~dp#PROCESADOS\%%~n#.png")
REM Utiliza este comando en caso de no funcionar:
REM Start /W /D "C:\Users\Kurono\My Others\ImageMagick-6.8.0-10\" convert.exe "%%#" "%%~dp#PROCESADOS\%%~n#.png"
)

Pause&exit


Saludos

Muchisimas gracias EleKtro H@cker, es impresionante tu código también, lo bueno es que me crea la carpeta Procesado en cada capitulo lo cual me es conveniente en otro grupo de imágenes que tengo que convertir.

En realidad era una sola carpeta llamada Procesados donde se crearía la misma estructura de subcarpetas donde estaban los capítulos .jpg por lo que me facilita luego comprimir todo a .zip.
Así el código de Meine programmen funciona perfecto siempre y cuando no cree la carpeta "Procesados" en la misma carpeta raíz de las subcarpetas.

Pero el tuyo Elektro H@cker tiene de bueno que me crea una carpeta Procesados por cada sub-carpeta lo cual me es muy conveniente para otro grupo de imágenes, mas que nada unos álbumes de fotos que tenia que editar en donde si me interesa descentralizar las imágenes.

¡¡Acabo de probar tu código y funciona de 10 también!! esto definitivamente no lo lograría yo solo

No se como agradecerles, ya puedo dar por resuelto el tema. Definitivamente voy a tener que leer y mucho para aprender bien todo este mundillo de los scripts y la programación, aunque no creo tener el talento para hacerlo.

Jajaaja hasta me da vergüenza ahora mostrar mi medio batch que puse en el primer mensaje  :P

Saludos a ambos!

Eleкtro

Así da gusto ayudar :xD

PD: No te recomiendo que te acostumbres a usar setlocal enabledelayedexpansion para procesar archivos. Setlocal enabledelayedexpansion es más rápido, pero tiene sus inconvenientes, usa "CALL".

Felices fiestas.








Kurono90

Cita de: EleKtro H@cker en 29 Diciembre 2012, 02:19 AM
Así da gusto ayudar :xD

PD: No te recomiendo que te acostumbres a usar setlocal enabledelayedexpansion para procesar archivos. Setlocal enabledelayedexpansion es más rápido, pero tiene sus inconvenientes, usa "CALL".

Felices fiestas.

Ok gracias, tendré en cuenta lo de setlocal ahora que intentaré aprender de lleno. Veré como me va.  ;D

Felices fiestas!