2016-01-13 4 views
0

Я хочу создать командный файл, который обнаруживает, когда окно CMD закрывается и выполняет непосредственно после действия.Пакетный файл делает действие после его закрытия

Если, например, открытия текстового файла text.txt, и после того, как я запустить командный файл prog.bat с этим кодом внутри:

@echo off 

echo Hello 

pause 

Как я могу сказать, что если партия окна CMD который в настоящее время работает, должен задавать файл text.txt, когда кто-то закрывает окно CMD? (закрывая с завершением процесса или ударяя X сверху)

+3

Возможные Дубликат: http://stackoverflow.com/questions/11657622/detect-or-intercept-moment-when-a-batch-is- закрытая-мышь-консоль-кнопка – Leptonator

+0

У вас должна быть другая программа, которая контролирует этот экземпляр cmd.exe и будет делать то, что вы хотите, чтобы закрыть окно. – Squashman

+0

Небрежная возможность будет иметь пакет masin, который вы хотите посмотреть в партии с параметром '/ wait'. Но тогда откроются два окна. – Bloodied

ответ

0

Я не один из лучших, но вы можете это сделать.

Вам необходимо создать 3 файла.

START.BAT

@echo off 
TITLE Start.bat 
REM :: THIS FILE OPEN'S THE CHECK WINDOW BATCH :: 

start Init2.bat 
ping localhost -n 1 >nul 
REM :: IF I WOULDN'T HAVE THE "PING" THE CHECK WINDOW BATCH WOULD BE ON TOP :: 

start Init1.bat 

Init1.bat

@echo off 
REM :: YOU CAN WRITE WHAT YOU WANT HERE :: 
REM :: YOUST REMEMBER TO CHANGE "Init2.bat" WHEN YOU CHANGE THE TITLE :: 

TITLE Init1.bat 
echo.HELLO 
pause>nul 

Init2.bat

@echo off 
SETLOCAL ENABLEDELAYEDEXPANSION 
TITLE Init2.bat 
:Start 
REM :: GET PID :: 

set "PID=" 
for /F "skip=3 delims=" %%A in ('TASKLIST /FI "WINDOWTITLE eq Init1.bat"') do (
    set "A=%%A" 
    set "A=!A:~26,8!" 
    set "A=!A: =!" 
    set "PID=!A!" 
    set "A=" 
    echo.!PID! 
    goto Test 
) 
REM :: IF NO WINDOWS NAMED "Init1.bat" exit :: 
if not defined "PID" (
    echo.No Window! 
    goto Exit 
) 
:Test 
set "true=0" 
for /F "skip=3 delims=" %%A in ('TASKLIST /FI "PID eq !PID!"') do (
    set "true=1" 
) 
REM :: IF WINDOW CLOSED :: 
if "!true!" EQU "0" (
    echo.No Window! 
    goto Exit 
) 
goto Test 
:Exit 
REM :: HERE ARE YOU WRITING THE CLOSING FILE :: 

ren testtxt.txt prog.bat 
[email protected] off > prog.bat 
echo.echo hello >> prog.bat 
echo.pause >> prog.bat 
exit 

Надеется, что это помощь.

Это не ответ на вики, но я надеюсь, что вы сочтете это полезным.

Единственное, что у вас есть окно за первым, но оно работает.

1

Это принятый ответ на this question:

@echo off 
if "%1" equ "Restarted" goto %1 
start "" /WAIT /B "%~F0" Restarted 
echo Execute here anything you want when the Batch file is closed... 
goto :EOF 

:Restarted 

echo Hello 
pause 
exit 
Смежные вопросы