programacion por lotes lista lenguaje ejemplos comandos batch bat avanzados avanzada archivos batch-file cmd exit

batch-file - por - lista de comandos batch



secuencia de comandos por lotes si el usuario presiona Ctrl+C hacer un comando antes de salir (5)

Debes usar trampas para hacer estas trampas

trap ctrl_c INT function ctrl_c() { echo "Trapped" }

Escribí un script que está haciendo net use al principio y net use /DELETE al final.

Pero si el usuario decide presionar Ctrl + C y sale del script, necesito hacer un net use /DELETE .

¿Es eso posible? No puedo encontrar nada en google


Mi idea es similar a la de dbenham. Sin embargo, me llevó una eternidad descubrir cómo minimizar la ventana de la consola actual. Golpeé mi cabeza contra la pared tratando de obtener la ventana de cmd para no ignorar una pulsación de tecla Alt+Space usando el método .SendKeys . Finalmente, recurrí a PowerShell para manejar minimizar y restaurar la ventana de trabajo.

La ventaja de esto sobre el de Dbenham es que inevitablemente tendrás algún usuario invertido cranealmente rectal que se aburre con la ejecución de tu script y lo termina con la X roja. Dbenham no captará eso, pero el mío debería.

@echo off setlocal if "%~1" neq "wrapped" ( rem :: Map network drive net use y: //computername/c$ >NUL rem :: minimize this console powershell -windowstyle minimized -command "" rem :: relaunch self with "wrapped" argument and wait for completion start /wait "" cmd /c %~f0 wrapped rem :: After script completes or user interrupts, remove drive mapping and restore window net use y: /delete >NUL powershell -windowstyle normal -command "" goto :EOF ) :: Main script goes here. :loop cls echo Simulating script execution... ping -n 2 0.0.0.0 >NUL goto loop


No creo que esto sea posible. Al comienzo de tu script, puedes usar:

net use /delete 2>nul net use g: //server/sharename /persistent:no

O podrías probar pushd lugar de net use ...

If Command Extensions are enabled the PUSHD command accepts network paths in addition to the normal drive letter and path. If a network path is specified, PUSHD will create a temporary drive letter that points to that specified network resource and then change the current drive and directory, using the newly defined drive letter. Temporary drive letters are allocated from Z: on down, using the first unused drive letter found.

De esta forma, siempre tendrá la unidad mapeada correctamente configurada.


Claro, simplemente ejecuta la mayor parte de tu script en una nueva sesión de CMD:

@echo off if "%~1" neq "_start_" ( net use ... cmd /c "%~f0" _start_ %* net use /delete ... exit /b ) shift /1 REM rest of script goes here

Mientras la ventana de la consola permanezca abierta, el comando net use /delete siempre se activará después de que se cierre la sesión interna de cmd. Podría cerrarse debido a una ejecución normal, el usuario presiona Ctrl-C o un error fatal: el net use /delete final net use /delete aún se disparará.


Hay una solución muy simple. Solo escribe:

ping -l www."site".com -t 65500>nul

antes de su comando net use / delete. La única forma de romper ese comando es presionar ctrl + c. Por ejemplo:

net use "arguments" ping -l www.google.com -t 65500>nul net use /delete

Esta es una buena forma de detectar ctrl + c, pero tenga cuidado con la dirección del sitio que escribe, ya que existe el riesgo de que el sitio se cuelgue. En consecuencia, debe escribir la dirección de un sitio inusual o de un sitio propio (Atención: el sitio debe existir), como un blog o algo así.