elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ayuda crear consola batch sin que se cierre al llegar al ultimo comando
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda crear consola batch sin que se cierre al llegar al ultimo comando  (Leído 2,534 veces)
erickesau

Desconectado Desconectado

Mensajes: 4


Ver Perfil
ayuda crear consola batch sin que se cierre al llegar al ultimo comando
« en: 11 Mayo 2015, 05:50 am »

estoy creando una consola la cual al llamarla ejecute comando como cualquier consola

ejemplo la consola se llama esau.cmd y la voy a invocar desde un archivo batch
el problema es que cuando la consola llega al final el archivo batch se cierra tambien y no continua con el siguiente comando.
la unica forma de que funcione es llamando con el comando call pero entonces no funcionaria como consola.


hay alguna forma de hacerla funcionar gracias desde ya  :rolleyes:.




archivo.bat
Código
  1. @echo off
  2. esau.cmd milogo.bmp
  3. echo el batch se cierra antes de llegar aqui.
  4.  





consola
esau.cmd
Código
  1. @echo off
  2. color 0a
  3. if -%1-==-- (goto regular) else (goto noregular)
  4.  
  5.  
  6.  
  7. :noregular
  8. if "%~x1"==".ico" goto ico
  9. if "%~x1"==".bmp" goto bmp
  10.  
  11. echo el formato de la imagen no es aceptable use ico para el icono o bmp para el logo.
  12. echo asegurese de no incluir coma , en el nombre de la imagen puede causar este mensaje.
  13. exit /b
  14.  
  15. :regular
  16. set /p archivo= arrastra el icono o el logo y sueltelo aqui luego presione enter:
  17.  
  18. set "esau=%archivo:"=-%"
  19. if "%esau:~-5%" == ".bmp-" goto bmp
  20. if "%esau:~-4%" == ".bmp" goto bmp
  21. if "%esau:~-5%" == ".ico-" goto ico
  22. if "%esau:~-4%" == ".ico" goto ico
  23.  
  24.  
  25. cls
  26. echo el formato de la imagen no es aceptable use ico para el icono o bmp para el logo
  27. exit /b
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35. :ico
  36. echo icono
  37.  
  38.  
  39. goto fin
  40.  
  41. :bmp
  42. echo logo
  43. :fin
  44. :::::al llegar a esta parte se cierra no regresa al batch desde donde lo invoque
  45. :::::si lo llamo con el comando call si funcionara correctamente
  46.  

Mod: tema movido, esto no es una duda general


« Última modificación: 11 Mayo 2015, 09:14 am por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.701



Ver Perfil
Re: ayuda crear consola batch sin que se cierre al llegar al ultimo comando
« Respuesta #1 en: 11 Mayo 2015, 09:29 am »

1. Esto es muy incorrecto:
Citar
Código
  1. if -%1-==-- (goto regular) else (goto noregular)

Para prevenir un argumento vacio, lo expandes para eliminarle comillas dobles, y le añades tú las comillas dobles:
Código
  1. if "%~1" EQU "" (goto :regular) else (goto :noregular)

2. El código que mostraste, en mi caso si que termina la ejecución del script de la forma que deseas ...volviendo al script que lo invocó, así que no puedo reproducir el error de diseño que comentas, pero de todas formas corregí algunas pequeñas cosas para seguir buenas prácticas de uso, prueba así:
Código
  1. @echo off
  2. color 0a
  3.  
  4. :: Argument Handling.
  5. If "%~1" EQU "" (
  6. goto :regular
  7. ) else (
  8. goto :noregular
  9. )
  10.  
  11. :NoRegular
  12. If /i "%~x1" EQU ".ico" (
  13. GoTo :ico
  14. )
  15.  
  16. If /i "%~x1" EQU ".bmp" (
  17. GoTo :bmp
  18. )
  19.  
  20. Echo: el formato de la imagen no es aceptable use ico para el icono o bmp para el logo.
  21. Echo: asegurese de no incluir coma , en el nombre de la imagen puede causar este mensaje.
  22. Exit /B 1
  23.  
  24. :Regular
  25. Set /p "archivo= arrastra el icono o el logo y sueltelo aqui luego presione enter:"
  26.  
  27. Set "esau=%archivo:"=-%" & REM "
  28. If /I "%esau:~-5%" EQU ".bmp-" (GoTo :bmp)
  29. If /I "%esau:~-4%" EQU ".bmp"  (GoTo :bmp)
  30. If /I "%esau:~-5%" EQU ".ico-" (GoTo :ico)
  31. If /I "%esau:~-4%" EQU ".ico"  (GoTo :ico)
  32.  
  33. CLS
  34. Echo: el formato de la imagen no es aceptable use ico para el icono o bmp para el logo
  35. Exit /B 1
  36.  
  37. :ico
  38. Echo icono
  39. Pause&Exit /B 0
  40.  
  41. :bmp
  42. Echo logo
  43. Pause&Exit /B 0

Saludos


« Última modificación: 11 Mayo 2015, 09:31 am por Eleкtro » En línea


erickesau

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayuda crear consola batch sin que se cierre al llegar al ultimo comando
« Respuesta #2 en: 11 Mayo 2015, 16:54 pm »

gracias maestro pondre en practica esas mejoras  ;-)
En línea

erickesau

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ayuda crear consola batch sin que se cierre al llegar al ultimo comando
« Respuesta #3 en: 21 Mayo 2015, 07:10 am »

encontre la forma de usar una consola hecha en batch sin que se nos cierre el archivo con el cual la invocamos  ;-)

lo que debemos de hacer es anteponer el comando cmd /c   antes de llamar la consola

ejemplo la consola se llama esau.cmd  la invocare asi:  
Código:
cmd /c esau [comando][comando]

Código:
cmd /c consola.cmd [comando][comando]

el siguiente archivo bat extraera todos los archivos de una carpeta y subcarpetas y los guardara en una sola carpeta  para eso tendra que llamar a la consola esau.cmd


Código:
@echo off

cmd /c esau extraer C:\micarpeta -/a/- C:\mi nueva carpeta

echo listo se extrayeron los archvivos de la carpeta y subcarpetas
pause
exit


tambien aqui esta otro ejemplo
Código:
@echo off
title archivo bat de prueba
set /p ru= hola escribe la ruta de la carpeta que quieres extraerle los archivos:
cls
set /p des= hora escribe la ruta de destino :

cmd /c esau extraer %ru% -/a/- %des%

echo listo se extrayeron los archvivos de la carpeta y subcarpetas
pause
exit


y esta es la consola que por hora solo le e agregado un comando.
Código:
@Echo OFF & SetLocal EnableDelayedExpansion
title erick esau cmd consola



if "%~1"=="help /?" goto :ayuda
if "%~1"=="help" goto :ayuda
if "%~1"=="help/?" goto :ayuda
if "%~1"=="" goto :ayuda

if "%~1"=="extraer" goto :extraer

goto :ayuda


:: extractor
:extraer
set "todo=%*"
set "buscar=%todo:"=%"

set "num=0"
:menu
set /a "num=%num% + 1"
if "!buscar:~%num%,7!"==" -/a/- " (
    goto :listo
)
goto menu

:listo




set /a "num2=%num% - 8"
set /a "num3=%num% + 7"

set "ruta=!buscar:~8,%num2%!
set "destino=!buscar:~%num3%,9999!





:: Extractor de archivos
@Echo OFF
if not exist "%destino%" md "%destino%"

::saca una lista pasa cada linea de texto por el bucle y comprueba si existe en el destino, si existe lo renombra como nombre copia+fecha+hora+numero variable y luego mueve el nuevo archivo

for /f "tokens=* delims=" %%a in ('dir /a:-d /s /b "%ruta%"') do (if exist "%destino%\%%~nxa" ren "%destino%\%%~nxa" "%%~na Copia %date:/=-%-%time::=-%-%random% %%~xa" && move "%%~a" "%destino%")

::los archivos que tenian el mismo nombre ya se renombraron y se movieron los nuevos archivos que tenian el mismo nombre, ahora se movera el resto
for /f "tokens=* delims=" %%a in ('dir /a:-d /s /b "%ruta%"') do (move "%%~a" "%destino%")

cls
echo listo se extrayeron los archivos
echo de %ruta%
echo a %destino%
exit /b


:::proximamente mas funciones...










:ayuda
cls
echo uso:
echo cmd /c esau [comandos]
echo.
echo cmd /c esau help /?             muestra un mensaje de ayuda
echo.
echo extraer    le indica a la consola que ejecute el comando de extraer
echo -/a/-      lo que esta antes de este comando se toma como objetivo y lo que esta despues como destino
echo.                    
echo ejemplos
echo.
echo el siguiente comando extraera todos los archivos de "micarpeta" y subcarpetas y los movera a (micarpeta2)
echo llamadolo desde otro batch de la siguiente manera como una consola pero anteponemos el comando cmd /c
echo.
echo cmd /c esau extraer micarpeta -/a/- micarpeta2
echo.
echo el comando cmd /c se utiliza antes de invocar a la consola esau ya que en la programacion batch
echo si invocamos a otro bat en modo consola ejecutara las acciones correctamente pero al terminar tambien terminara al batch que lo a llamado.
exit /b



:::podemos enviarle variables a la consola pero la consola no puede estableser variables para el batch desde donde lo llamamos porque la consola se abrira en la misma ventana pero como un proceso independiente.










y para quienes les guste el extractor de archivos y quieren usarlo como archivo batch normal aqui esta
Código:
@echo off
title extractor de archivos de multiples carpetas v1.0
if not "%~1"=="" (
    color 0a
) else (
    echo no es necesario abrir este bat solo arrastra la carpeta y dejala caer sobre el archivo %~nx0 && echo presiona una tecla para salir && pause>nul && exit
)

echo quiere extraer todo de %*
echo presione S para extraer su contenido
choice /c s
if "%errorlevel%"=="1" (goto :empezar)
exit
:empezar
md extraido-temp56644..h-.h5a.b1
set "erickesau=%cd%\extraido-temp56644..h-.h5a.b1"
::saca una lista pasa cada linea de texto por el bucle y comprueba si existe en el destino, si existe lo renombra como nombre copia+fecha+hora+numero variable y luego mueve el nuevo archivo

for /f "tokens=* delims=" %%a in ('dir /a:-d /s /b %*') do (if exist "%erickesau%\%%~nxa" ren "%erickesau%\%%~nxa" "%%~na copia %date:/=-%-%time::=-%-%random% %%~xa" && move "%%~a" "%erickesau%")

::los archivos que tenian el mismo nombre ya se renombraron y se movieron los nuevos archivos que tenian el mismo nombre, ahora se movera el resto
for /f "tokens=* delims=" %%a in ('dir /a:-d /s /b %*') do (move "%%~a" "%erickesau%")


echo Presiona una tecla para salir
pause>nul
exit



:::creado por erick esau para extrer todos los archivos de una carpeta y subcarpetas
:::solo arrastrar la carpeta y dejarla caer sobre este archivo bat no es nesesario que este abierto se abrira al caer la carpeta sobre el.
« Última modificación: 21 Mayo 2015, 07:15 am por erickesau » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda usar comando set path en consola
Programación Visual Basic
bk9 1 4,051 Último mensaje 13 Diciembre 2008, 21:38 pm
por WestOn
Los juegos de consola comienzan a llegar a Chrome
Noticias
wolfbcn 0 940 Último mensaje 9 Diciembre 2011, 22:30 pm
por wolfbcn
Comando para crear nombre de un txt en BATCH
Scripting
Esgrimidor 3 1,758 Último mensaje 25 Junio 2012, 02:56 am
por Esgrimidor
[BATCH] comando DOS para parar la consola cuando se llenda de texto
Scripting
Pirat3net 6 2,864 Último mensaje 13 Noviembre 2012, 07:16 am
por Eleкtro
Netflix planea llegar a España en el último trimestre de 2015
Noticias
el-brujo 0 789 Último mensaje 13 Agosto 2014, 11:54 am
por el-brujo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines