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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  No cierra cmd con edlin
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: No cierra cmd con edlin  (Leído 5,825 veces)
Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
No cierra cmd con edlin
« en: 24 Septiembre 2017, 00:14 am »

Tengo dos archivos texto iguales (texto1 y texto2) con este formato

juan
antonio
el_bueno
el_bueno2
pedro

Necesito meter el_bueno, el_bueno2, en dos variables para crear un directorio con ese nombre compuesto

he procedido así:


Código:
@echo off
rem borra las dos primeras lineas de texto1 y deja "el bueno" en primera linea.
(
ECHO 1d, 1d
ECHO E
) | EDLIN /B texto1.txt > nul 2>&1
Echo.
>Nul Ping -n 2 Localhost
rem borra las tres primeras lineas de texto2 y deja "el bueno2" en primera linea.
Echo.
(
ECHO 1d, 2d
ECHO E
) | EDLIN /B texto2.txt > nul 2>&1
goto datos
:datos
rem toman las primeras lineas de los textos para incluirlos en las variables.
<"texto1.txt" set /p "var1="
set "var1"
Echo.
<"texto2.txt" set /p "var1="
set "var2"

Md %var1%_%var2%

Luego copio unos archivos de otro directorio a ese que he creado y lo comprimo en rar. Eso así funciona pero al terminar el proceso no cierra la ventana de cmd.

He probado con esta otra formula para mover las lineas a la primera linea y tomar el dato para la variable...

Código:
@echo off
(
echo 3,3,1M
echo e
) | edlin /b texto2.txt
(
echo 4,4,1M
echo e
) | edlin /b texto2.txt

pero me pasa lo mismo.

¿Hay manera de tomar el dato de los textos sin usar edlin?







« Última modificación: 24 Septiembre 2017, 12:30 pm por Orni1 » En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: No cierra cmd con edlin
« Respuesta #1 en: 24 Septiembre 2017, 01:09 am »

1) Primero que todo , se mas especifico porfa.  :huh:

2) segundo si quieres simplemente cerrar la ventana del cmd coloca al final del batch :

Código
  1. exit


                            si te sirvió comenta y sino te funciono se mas especifico.


En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: No cierra cmd con edlin
« Respuesta #2 en: 24 Septiembre 2017, 12:30 pm »

Trataré de ser mas especifica.

Al final del código ya tiene su cls y su exit, el código corre bien y realiza la función de tomar los datos copiar los archivos y comprimir el nuevo directorio.
Cuando llega el momento de salir ejecuta bien el cls limpiando la pantalla de la consola pero no llega a cerrar la consola quedando solo el cursor titilando.

He probado a quitar los comandos edlin y meter los datos de variable a mano y así si que cierra, es solo cuando incluyo el comando con edlin cuando se queda sin cerrar, si le das a la x de la ventana si que se cierra el cmd.

La pregunta es: si hay manera de tomar los datos de los dos textos en su tercera y cuarta linea sin usar edlin para poner esas lineas en la primera linea del texto.


En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: No cierra cmd con edlin
« Respuesta #3 en: 25 Septiembre 2017, 00:23 am »

si el comando edlin te funciona no cambies el scrript solo busca otras formas de cerrar la cmd.

Por ejemplo si el exit no funciona sustitúyelo por uno de estos dos codes:

primer code, es muy poco problable que te funcione.
Código
  1. taskkill /F /im cmd.exe > nul

Segundo code , este seguro que te va a cerrar la vestana del cmd:

Código
  1. Call :1
  2.  
  3.  
  4. REM Prevent running the 1.vbs twice
  5. Exit /b 0
  6. :1
  7. REM  This will create a file called 1.vbs in %TEMP%
  8. REM
  9. REM  The following will overwite any pre-existing file called %TEMP%\1.vbs
  10. echo.> %TEMP%\1.vbs
  11. echo set taskmgr = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery ("select * from Win32_Process") >> %TEMP%\1.vbs
  12. echo For each process in taskmgr >> %TEMP%\1.vbs
  13. echo. >> %TEMP%\1.vbs
  14. echo If Lcase(process.name) = "cmd.exe" then >> %TEMP%\1.vbs
  15. echo Process.terminate >> %TEMP%\1.vbs
  16. echo End If >> %TEMP%\1.vbs
  17. echo. >> %TEMP%\1.vbs
  18. echo Next >> %TEMP%\1.vbs
  19. Cscript.exe //NoLogo "%TEMP%\1.vbs"
  20. Exit /b 0

                                    Comenta si te funciono. Recuerda el primer y segundo code sustituye el comando Exit. Utiliza cualquiera de los dos, aunque te recomiendo el segundo.
En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: No cierra cmd con edlin
« Respuesta #4 en: 25 Septiembre 2017, 12:07 pm »

No me ha funcionado ninguno de los dos.

Sustituyo por exit y se queda igual que antes cmd con el cursor.

Quitando los dos comandos edlin (metiendo las variables a mano) si que funcionan los dos códigos que me has proporcionado al igual que lo hace exit, pero corriendo el código con edlin no rulan ninguna de las tres opciones de cierre.

No se cual es problema que genera edlin pero he notado que a veces también salta un error de windows "ntvdm.exe dejo de funcionar" cuando corre el código. 
En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: No cierra cmd con edlin
« Respuesta #5 en: 25 Septiembre 2017, 19:08 pm »

Si quieres que te ayude , pon el script que no cierra  la cmd y
pon lo que contiene el texto que vas a modificar.

yo probé el batch que pusiste arriba y si me funciono.

a mi me cierra la cmd, con este batch:

Código
  1. @echo off
  2. (
  3. echo 3,3,1M
  4. echo e
  5. ) | edlin /b texto2.txt
  6. (
  7. echo 4,4,1M
  8. echo e
  9. ) | edlin /b texto2.txt
  10. cls
  11. exit

y el texto a modificar es:

Código:
juan
antonio
el_bueno
el_bueno2
pedro
                            Ami me funciona y si cierra la cmd.
    publica tu code que no cierra la cmd y también el texto a modificar.
    Para poder a ayudarte
En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: No cierra cmd con edlin
« Respuesta #6 en: 25 Septiembre 2017, 21:37 pm »

Me da un poco de vergüenza ponerlo entero
El código este:

Código:
@echo off
TITLE Wellcome %USERNAME%
MODE con:cols=82 lines=40
if not exist %temp%\ttdje MD %temp%\ttdje
if not exist %TMP%\BMCTP\ MD %TMP%\BMCTP
if exist %temp%\ttdje\*.txt del %temp%\ttdje\*.txt >nul
Echo.
if exist %temp%\ttdje\*.bak del %temp%\ttdje\*.bak >nul
Echo.
if exist %temp%\ttdje\*.pna del %temp%\ttdje\*.pna >nul
if not exist files_zip MD files_zip >nul
if not exist compressed MD compressed
if exist "%TMP%\BMCTP" Del /Q "%TMP%\BMCTP" >nul
    >Nul Ping -n 2 Localhost
if not exist files_zip MD files_zip >nul
if not exist compressed MD compressed >nul
echo.
if exist 7z.dll move 7z.dll %temp%\ttdje\7z.dll >nul
if exist 7z.exe move 7z.exe %temp%\ttdje\7z.exe >nul
if exist Rar.exe move Rar.exe %temp%\ttdje\Rar.exe >nul
echo.
goto pass1
:passno
color a
          (  cls
echo.
echo         ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo         º                                    º
echo         º        ..:: Attention ::..         º
echo         º        will not be echoed          º
echo         º                                    º
echo         ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
                 echo/
echo      ============================================
echo      =          ..:: ATTENTION ::..             =
echo      ============================================
echo      = Please, Enter the value for the password.=
echo      ============================================
                 echo/
                 echo/
                     pause
                       goto pass1
                                        )
 
:pass1

                 ( cls
echo.
echo         ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo         º                                    º
echo         º        ..:: Attention ::..         º
echo         º        will not be echoed          º
echo         º                                    º
echo         ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
                      echo/
      set /p "Pass=^> Enter the value for the password in all rar files:  "
                if not defined pass (goto:passno)
                                             goto continue
             )
 
:continue
cls
echo.
echo.
echo           Tu contraseña es %pass%
pause
:inicio
cls
echo         ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
echo         º                                    º
echo         º    ..:: Extract-zip massive ::..   º
echo         º              by Orni               º
echo         º                                    º
echo         ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
echo.
echo ----------------------------------------------------------------------------
echo  %DATE% ^| %TIME%
echo ----------------------------------------------------------------------------
if not exist *.zip goto salir
dir *.zip /B >%temp%\ttdje\temp.txt
    >Nul Ping -n 2 Localhost
setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%x in ('type %temp%\ttdje\temp.txt') do (
set linea=%%x
set linea=!linea:.zip=!
call :show !linea!
)
Goto Busca
:Busca
    <"%temp%\ttdje\temp1.txt" set /p "file="
    set "file"
    echo Wait, extracting '%file%.zip' to %file% dir . . . . .
    Echo.
    if exist %file%.zip %temp%\ttdje\7z.exe x %file%.zip -aoa -o%file% >nul
Goto Busca_datos
:Busca_datos
    dir %file%\*.pna /S /B >%temp%\ttdje\temp2.txt
    >Nul Ping -n 2 Localhost
    <"%temp%\ttdje\temp2.txt" set /p "pna=" >nul
    set "pna" >nul
    copy "%pna%" "%temp%\ttdje" >Nul
    >Nul Ping -n 2 Localhost
    type "%pna%" > "%temp%\ttdje\temp3.txt"
    >Nul Ping -n 2 Localhost
    type "%pna%" > "%temp%\ttdje\temp4.txt"
    >Nul Ping -n 2 Localhost
Goto Serie
:Serie
setlocal enabledelayedexpansion
    for /f "tokens=* delims=" %%x in ('type %temp%\ttdje\temp3.txt') do (
    set linea=%%x
    set linea=!linea:fecha=!
    call :show1 !linea!
    )
Goto Version
:Version
    Set Ruta=%temp%\ttdje
    Set Archivo=temp5
If Not Exist "%temp%\ttdje\%Archivo%.txt" (
        cls
Echo No se ha encontrado el archivo solicitado, intente nuevamente.
Goto version
) Else (

Goto Backup
)
:Backup
Copy /Y "%Ruta%\%Archivo%.txt" "%TMP%\BMCTP\%Archivo%_Backup.txt" >nul
If Exist "%TMP%\BMCTP\%Archivo%_Backup.txt" (
Echo.
>Nul Ping -n 3 Localhost & Goto Caracter
) Else (

Echo Error al hacer Backup del archivo.
Pause >nul
Exit
)
:Caracter
Set Caracter=^=
If "%Caracter%" == "" Cls & Echo Por favor no intente ingresar valores nulos... & Echo. & Goto Caracter
>Nul Ping -n 1 Localhost
:Mod
Set PosX=0
For /F "Usebackq Tokens=*" %%a IN ("%Ruta%\%Archivo%.txt") Do (
Set Linea=%%a
Call:Buscador
Set "LineaNueva="
)

Goto Aprobacion
 
:Buscador
If Not "%Caracter%" == "!Linea:~%PosX%,1!" (
If "!Linea:~%PosX%,1!" == "" (
Set PosX=0
Echo !LineaNueva!>>"%TMP%\BMCTP\Nuevo_%Archivo%.txt"
Goto:Eof
)
Set "LineaNueva=%LineaNueva%!Linea:~%PosX%,1!"
Set /A PosX+=1
Goto Buscador
) Else (
If "!Linea:~%PosX%,1!" == "" (
Set PosX=0
Echo !LineaNueva!>>"%TMP%\BMCTP\Nuevo_%Archivo%.txt"
Goto:Eof
)
Set /A PosX+=1
Goto Buscador
)
 
:Aprobacion
del /f /q %Ruta%\temp5.txt
Copy /Y "%TMP%\BMCTP\Nuevo_%Archivo%.txt" "%Ruta%\%Archivo%.txt" >nul
Copy /Y "%TMP%\BMCTP\Nuevo_%Archivo%.txt" "%Ruta%\TEMP6.txt" >nul

    >Nul Ping -n 1 Localhost
    Del /Q "%TMP%\BMCTP" >nul
    >Nul Ping -n 2 Localhost
Goto Datos
:Datos
 setlocal enabledelayedexpansion
    for /f "tokens=* delims=" %%x in ('type %temp%\ttdje\temp6.txt') do (
    set linea=%%x
    set linea=!linea:id=!
    set linea=!linea:.pna=!
    call :show2 !linea!
    )
Goto mod
:mod
    (
    echo 3,3,1M
    echo e
    ) | edlin /b %temp%\ttdje\temp4.txt >nul
    >Nul Ping -n 2 Localhost
   >nul <"%temp%\ttdje\temp4.txt" set /p "serie=" >nul
    set "serie" >nul
>Nul Ping -n 2 Localhost
    (
    echo 4,4,1M
    echo e
    ) | edlin /b %temp%\ttdje\temp5.txt >nul
    >Nul Ping -n 2 Localhost
   >nul <"%temp%\ttdje\temp5.txt" set /p "version=" >nul
    set "version" >nul
Goto comprime
:Comprime
  <"%temp%\ttdje\temp7.txt" set /p "nomb=" >nul
    set "nomb" >nul
    set mapn=%nomb%_%serie%_%version%
    rename "%file%"  "%mapn%"
if exist %mapn% %temp%\ttdje\rar a -r -rr -v116M -p%Pass% compressed\%mapn% %mapn%.rar %mapn%
             move "%file%.zip" "files_zip" >nul
if not exist compressed\%mapn%.rar goto rarerror   
if exist %temp%\ttdje\*.txt del %temp%\ttdje\*.txt
    if exist %temp%\ttdje\*.bak del %temp%\ttdje\*.bak
    if exist %temp%\ttdje\*.pna del %temp%\ttdje\*.pna
    rmdir /s /Q %mapn%
cls
Goto:inicio
:Rarerror
    echo No se ha podido crear el archivo comprimido.
    pause >nul
    @cls&exit
:Salir
    if exist %temp%\ttdje\*.txt del %temp%\ttdje\*.txt
    if exist %temp%\ttdje\*.bak del %temp%\ttdje\*.bak
    if exist %temp%\ttdje\*.pna del %temp%\ttdje\*.pna
    echo All zip files have been extracted.
    echo All zip have been moved to dir "files_zip"
    echo The .rar files have been created with the pass %Pass%
    echo Do you want to delete the directory
    rd /s files_zip
CLS
@EXIT
:show
    echo %*>>%temp%\ttdje\temp1.txt
    goto:eof
:show1
    echo %*>>%temp%\ttdje\temp5.txt
    goto:eof
:show2
    echo %*>>%temp%\ttdje\temp7.txt
    goto:eof

Ejemplo de archivo que gestiona es este, el bat y el archivo content.zip están en la misma carpeta del pc.



« Última modificación: 27 Septiembre 2017, 08:52 am por Orni1 » En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: No cierra cmd con edlin
« Respuesta #7 en: 26 Septiembre 2017, 01:23 am »

Necesito saber algo . Ese bat utiliza alguna herramienta comandline?

por ejemplo algún .exe?

si , utiliza algún exe por-favor mandamelo , necesito saber que hace ese bat.

aunque por encima que he visto este bat parece un tipo de compresor para poner contraseña a los archivos.
En línea



Orni1

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: No cierra cmd con edlin
« Respuesta #8 en: 26 Septiembre 2017, 08:46 am »

Utiliza 7z.exe, 7zdll y el rar.exe descarga de aquí

La intención final del bat es empaquetarlo todo en un exe con "bat to exe converter"

El bat lo que pretende es:
desempacar el zip con las fotos
Leer los datos del archivo pna que contiene el zip, la primera linea, la tercera y la cuarta de ese archivo pna, quitando partes del texto como los signos = (gracias a tu codigo) algunas palabras.
Nombrar  el archivo nuevo con esos tres datos
Empaquetarlo todo en rar (en .part) con un pass.
« Última modificación: 26 Septiembre 2017, 10:37 am por Orni1 » En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: No cierra cmd con edlin
« Respuesta #9 en: 27 Septiembre 2017, 00:04 am »

1) el code no funciona.  ::)

en una parte de el code  el batch llama unos archivos txt que nunca se crearon .

Código
  1. :Busca_datos
  2.    dir %file%\*.pna /S /B >%temp%\ttdje\temp2.txt
  3.    >Nul Ping -n 2 Localhost
  4.    <"%temp%\ttdje\temp2.txt" set /p "pna=" >nul
  5.    set "pna" >nul
  6.    copy "%pna%" "%temp%\ttdje" >Nul
  7.    >Nul Ping -n 2 Localhost
  8.    type "%pna%" > "%temp%\ttdje\temp3.txt"
  9.    >Nul Ping -n 2 Localhost
  10.    type "%pna%" > "%temp%\ttdje\temp4.txt"
  11.    >Nul Ping -n 2 Localhost
  12. Goto Serie
  13. :Serie
  14. setlocal enabledelayedexpansion
  15.    for /f "tokens=* delims=" %%x in ('type %temp%\ttdje\temp3.txt') do (
  16.    set linea=%%x
  17.    set linea=!linea:fecha=!
  18.    call :show1 !linea!
  19.    )
  20. Goto Version
  21. :Version
  22.    Set Ruta=%temp%\ttdje
  23.    Set Archivo=temp5
  24. If Not Exist "%temp%\ttdje\%Archivo%.txt" (
  25.        cls
  26. Echo No se ha encontrado el archivo solicitado, intente nuevamente.
  27. Goto version
  28. ) Else (
  29.  
  30. Goto Backup
  31. )

los archivos temp.txt - temp2.txt - temp3.txt - temp4.txt y temp5.txt. nunca se llegan a crear en el directorio tamporal.

y por eso tira este error:




en la parte de el code:

Código
  1. :Version
  2.    Set Ruta=%temp%\ttdje
  3.    Set Archivo=temp5
  4. If Not Exist "%temp%\ttdje\%Archivo%.txt" (
  5.        cls
  6. Echo No se ha encontrado el archivo solicitado, intente nuevamente.
  7. Goto version
  8. ) Else (
  9.  
  10. Goto Backup
  11. )

aqui revisa si no existe el archivo  temp5.txt y como nunca se creo ese archivo
mustra un bucle infinito en la pantalla mostrando el munsaje:

Código:
No se ha encontrado el archivo solicitado, intente nuevamente.

en pocas palabras revisa el code ya que nunca se crean esos archivos txt y ese es el error.
revisa por que nunca se crean esos txt (temp.txt - temp2.txt - temp3.txt - temp4.txt y temp5.txt)
En línea



Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
no me cierra el cmd
Programación Visual Basic
wACtOr 2 1,488 Último mensaje 2 Junio 2007, 11:14 am
por Hendrix
no c cierra el cmd
Scripting
xstatic 2 2,315 Último mensaje 26 Marzo 2008, 07:41 am
por leogtz
Problema con función EDLIN (CONTESTADO. SIN SOLUCIÓN)
Scripting
<ИΘZIЭ(ŦB> 2 3,225 Último mensaje 1 Octubre 2009, 04:23 am
por <ИΘZIЭ(ŦB>
En entorno Visual Studio 2008, no se cierra.Sin entorno VS2008 se cierra.
.NET (C#, VB.NET, ASP)
javier234- 6 6,768 Último mensaje 16 Febrero 2011, 23:08 pm
por [D4N93R]
Duda con comando EDLIN
Scripting
willdoxero 2 2,683 Último mensaje 20 Mayo 2014, 08:15 am
por willdoxero
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines