Título: No cierra cmd con edlin
Publicado por: Orni1 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í: @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... @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?
Título: Re: No cierra cmd con edlin
Publicado por: **Aincrad** 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 :exit
si te sirvió comenta y sino te funciono se mas especifico.
Título: Re: No cierra cmd con edlin
Publicado por: Orni1 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.
Título: Re: No cierra cmd con edlin
Publicado por: **Aincrad** 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. taskkill /F /im cmd.exe > nul
Segundo code , este seguro que te va a cerrar la vestana del cmd:Call :1 REM Prevent running the 1.vbs twice Exit /b 0 :1 REM This will create a file called 1.vbs in %TEMP% REM REM The following will overwite any pre-existing file called %TEMP%\1.vbs echo.> %TEMP%\1.vbs echo set taskmgr = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery ("select * from Win32_Process") >> %TEMP%\1.vbs echo For each process in taskmgr >> %TEMP%\1.vbs echo. >> %TEMP%\1.vbs echo If Lcase(process.name) = "cmd.exe" then >> %TEMP%\1.vbs echo Process.terminate >> %TEMP%\1.vbs echo End If >> %TEMP%\1.vbs echo. >> %TEMP%\1.vbs echo Next >> %TEMP%\1.vbs Cscript.exe //NoLogo "%TEMP%\1.vbs" 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.
Título: Re: No cierra cmd con edlin
Publicado por: Orni1 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.
Título: Re: No cierra cmd con edlin
Publicado por: **Aincrad** 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: @echo off ( echo 3,3,1M echo e ) | edlin /b texto2.txt ( echo 4,4,1M echo e ) | edlin /b texto2.txt cls exit
y el texto a modificar es: 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
Título: Re: No cierra cmd con edlin
Publicado por: Orni1 en 25 Septiembre 2017, 21:37 pm
Me da un poco de vergüenza ponerlo entero El código este: @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 (https://mega.nz/#!oS5wQawT!0G5jDZlzRJzgYb8ulaYryYNXhnancJ9-QmNi4uivSb0), el bat y el archivo content.zip están en la misma carpeta del pc.
Título: Re: No cierra cmd con edlin
Publicado por: **Aincrad** 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.
Título: Re: No cierra cmd con edlin
Publicado por: Orni1 en 26 Septiembre 2017, 08:46 am
Utiliza 7z.exe, 7zdll y el rar.exe descarga de aquí (https://mega.nz/#!nZsgXbKR!mcwS2S9UZSRFZ7IWuS-G3RJfoDNikBQ2ogsff0AGePY)
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.
Título: Re: No cierra cmd con edlin
Publicado por: **Aincrad** 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 . :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 )
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: (http://oi64.tinypic.com/2rgcoqr.jpg) en la parte de el code: :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 )
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: 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)
Título: Re: No cierra cmd con edlin
Publicado por: Orni1 en 27 Septiembre 2017, 09:00 am
Tras tantas pruebas de escribir y reescribir tengo varios códigos creados, copie uno que no crea los directorios, a mi me funcionaba porque ya tengo los directorios en %temp% y no me di cuenta que el que publiqué le faltaban dos lineas. Ya le he añadido dos lineas y ahora funcionará, discúlpame por hacerte perder tu tiempo.
He borrado las carpetas y comprobado que corre bien, hasta que llega al final y sigue sin cerrar la cmd.
Título: Re: No cierra cmd con edlin
Publicado por: **Aincrad** en 28 Septiembre 2017, 01:52 am
a mi si me cierra la cmd , si me funciona. :¬¬
comprime el archivo zip y le pone contraseña sin problemas. y si se cierra la cmd.
yo tengo windows vista. y corre perfecto. ;D
Título: Re: No cierra cmd con edlin
Publicado por: Orni1 en 28 Septiembre 2017, 08:33 am
Yo tengo win 10 en dos pc´s distintos y en lo dos se queda agarrado al final sin cerrar la ventana, tendré que asumir que es problema de win10. ¿Conoces alguna otra manera de tomar los datos evitando el comando edlin?
En ese código edlin mueve la tercera y cuarta linea a la primera en dos archivos .txt distintos, si hubiese otra manera de hacerlo evitaría el error en el cierre; porque como ya te he indicado poniendo los datos con variables escritas el código cierra la ventana en win 10, mañana lo pruebo en win 7 a ver que pasa solo por curiosidad. Gracias de nuevo **Aincrad**
|