2011-07-04 15:32:05 +0000 2011-07-04 15:32:05 +0000
56
56

Hoe voorkom je dat de opdrachtprompt sluit na uitvoering?

Mijn probleem is dat er in Windows commandoregelvensters zijn die direct na uitvoering sluiten. Om dit op te lossen, wil ik dat het standaard gedrag is dat het venster open blijft. Normaal gesproken kan dit gedrag worden vermeden met drie methoden die me te binnen schieten:

  1. Het plaatsen van een pause regel na batch programma’s om de gebruiker te vragen een toets in te drukken voordat hij 2 verlaat. 2. Het uitvoeren van deze batch bestanden of andere commandoregel manipulatie tools (zelfs service starten, herstarten, etc. met net start xy of iets dergelijks) binnen cmd.exe(Start - Run - cmd.exe)
  2. Het uitvoeren van een cmd /k regel na een batch programma om de gebruiker te vragen een toets in te drukken voordat hij verlaat. 3. Deze programma’s draaien met cmd /k myprogram.bat zoals dit: cmd.exe

Maar er zijn nog enkele andere gevallen waarin de gebruiker:

  1. Draait het programma de eerste keer en weet niet dat het gegeven programma in Command Prompt (Windows Command Processor) draait, b.v. bij het uitvoeren van een snelkoppeling vanuit het Startmenu (of van ergens anders), OR
  2. Vindt het een beetje ongemakkelijk om cmd.exe de hele tijd uit te voeren en heeft niet de tijd/mogelijkheid om de code van deze commando’s overal te herschrijven om een pauze in te lassen of om expliciet te vermijden dat het programma wordt verlaten.

Ik heb een artikel gelezen over het veranderen van standaard gedrag van _String values_ bij het openen van het expliciet, met het creëren van een AutoRun vermelding en het manipuleren van de inhoud ervan op deze locaties:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Command Processor\AutoRun

(De AutoRun-items zijn cmd /d /k…)

Ik zet &007 als waarde in om het te proberen, maar dit veranderde niets aan het gedrag van de hierboven genoemde spullen… Het veranderde alleen het gedrag van het commandoregel-venster bij het openen ervan (Start-Run-cmd.exe).

Hoe werkt het dan? Kun je me ideeën geven om dit probleem op te lossen?

Antwoorden (11)

18
18
18
2011-07-04 17:45:20 +0000

Citaat Microsoft :

Een console wordt gesloten wanneer het laatste proces dat eraan verbonden is, wordt beëindigd of FreeConsole oproept.

Met andere woorden, het console-venster Win32 wordt altijd gesloten wanneer het laatste programma dat erin draait, wordt afgesloten, en u kunt dit niet wijzigen.

  • *

(Voor 16-bit MS-DOS programma’s biedt Windows een optie “Sluiten bij afsluiten” in het eigenschappen venster, maar dit is geen uitzondering op het bovenstaande: het is het NTVDM proces dat het venster open houdt. Ook deze optie is weer per programma).

8
8
8
2013-03-21 14:10:13 +0000

Open gewoon een commando prompt op de locatie van uw batchbestand en voer handmatig de naam van uw batchbestand in om het in dat venster uit te voeren.

1.Navigeer naar de map waar uw uitvoerbare bestand zich bevindt 2.Shift-Rechtsklik en selecteer “Command venster van hier” 3.Typ in de naam van het uitvoerbare bestand en druk op enter 4.Het proces zou moeten lopen, maar het venster zou open moeten blijven

4
4
4
2012-11-06 13:37:01 +0000

cmd.exe /k zal je problemen geven met een of andere partij. Als de batch exit 1 (zonder /B) uw console wordt gesloten. Een truc is om te gebruiken:

cmd.exe /k cmd /c ...

Om dit standaard te gebruiken voor alle batch bestanden, zet HKEY_CLASSES_ROOT\cmdfile\shell\open\command\(default) en HKEY_CLASSES_ROOT\batfile\shell\open\command\(default) op "%windir%\system32\cmd.exe" /k "%windir%\system32\cmd" /c "%1" %*.

3
3
3
2014-04-26 16:55:23 +0000

Ik heb net een domme oplossing gevonden na het lezen van het antwoord van grawity.

Mijn use case was het opzetten van een console-omgeving op het werk waar des te meer redelijke oplossingen worden geblokkeerd. Het enige wat ik nodig heb is om PATH in te stellen en enkele doskey aliassen te configureren en naar de shell te worden gedumpt.

Mijn oplossing (net getest op Win7) als add cmd als laatste regel in het batchbestand. Dit draait een genestelde commando prompt die de omgeving van de ouder erft. Die kinder-shell houdt het batchproces open totdat je het verlaat, op dat moment heeft de batch geen kinderprocessen en gaat het ook weg.

2
2
2
2015-12-11 17:02:56 +0000

Stel dat je twee batchbestanden hebt die je in hun eigen geval wilt lanceren en open houden als hun uitvoerbare uitgangen. Laten we die twee batches A.bat en B.bat aanroepen.

Voor het gemak zou u nu een batchbestand kunnen hebben om ze allebei te lanceren, laten we dat launch_both.bat met inhoud aanroepen:

start cmd /k "A.bat & cmd /c"
start cmd /k "B.bat & cmd /c"

Het werkt misschien niet zoals verwacht als u exit aanroept in een van de twee batchbestanden. Dat zal moeten worden getest.

2
2
2
2013-03-21 20:02:36 +0000

In plaats van PAUSE te gebruiken (ik geef de voorkeur aan CHOICE of TIMEOUT boven het gebruik van PAUSE wanneer dat nodig is), kunt u de oplossing hier gebruiken: 886848/how-to-make-windows-batch-file-pause-wanneer-dubbel-geklikt .

Op deze manier kunt u, als u vanuit Windows Verkenner op een batchbestand of link (snelkoppeling) klikt, het batchbestandprogramma laten pauzeren voordat het wordt afgesloten, zodat u de uitvoer van het programma en eventuele foutmeldingen kunt bekijken.

Met behulp van CHOICE kunt u de mogelijkheid voor de gebruiker programmeren om verschillende acties te selecteren en met behulp van TIMEOUT kunt u het venster na een tijdvertraging (zonder toezicht) laten sluiten. Als je het batchbestand vanuit een commando prompt venster uitvoert, kunnen deze pauzes vervelend zijn.

De gekoppelde oplossing laat je beslissen of je de pauzes wilt overslaan als het batchbestand vanuit een commando prompt venster werd uitgevoerd.

Je kunt meer lezen bij de bijgeleverde link, maar de basis ervan is dat het de omgevingsvariabele

%cmdcmdline%

gebruikt om te bepalen of het batchbestand vanuit een commando venster werd uitgevoerd of niet.

Dus je gebruikt het als volgt:

Op het punt waar het batchbestand wordt afgesloten, voeg je een code toe zoals deze:

echo %cmdcmdline:"=-% | find /i "cmd /c --%~dpf0%-"
if %errorlevel% NEQ 0 goto :EOF
pause
goto :EOF

rem if %errorlevel% EQU 0 batch-file: %~dpf0 was executed from Windows Explorer, ...
rem if %errorlevel% NEQ 0 batch-file: %~dpf0 was executed from within a Command Prompt
1
1
1
2013-03-12 15:30:15 +0000

De beste manier die ik heb gevonden om dit te omzeilen is om uw batch-bestanden op te roepen vanuit een ander batch-bestand met behulp van start.

dus als u normaal gesproken een bestand met de naam go.bat zou draaien, dan zou u een tweede batch-bestand aanmaken met de naam go2.bat

de inhoud van go2.bat zou gewoon start go.bat

zijn het eerste venster sluit onmiddellijk, maar degene die uw go.bat draait blijft openstaan

1
1
1
2013-09-24 12:30:12 +0000

Dit werkt voor versie 5.00 van de Windows Registry Editor.

[HKEY_CLASSES_ROOT\batfile\shell\open\command]
@="cmd.exe /k \"%1\" %*"

[HKEY_CLASSES_ROOT\cmdfile\shell\open\command]
@="cmd.exe /k \"%1\" %*"

Sla de bovenstaande cmds op in een bestand met de naam cmdbatfile-open.reg en voer het uit!

0
0
0
2017-03-30 08:30:11 +0000

Voor gebruikers die gebruik maken van Windows 10, merk op dat geen van de bovenstaande antwoorden momenteel werken voor Windows 10.

Voor Windows 10, als je toegang hebt tot het script, moet je de volgende code toevoegen aan het einde:

read

Die code zal wachten op een invoer alvorens te sluiten.

0
0
0
2019-12-31 21:58:53 +0000

De vraag van de OP is veel meer betrokken dan wat ik nodig had, en dus is dit antwoord voor anderen die hier komen op zoek naar een eenvoudige manier om een commando-regel programma te starten en het venster open te houden nadat het commando-regel programma is afgesloten.

In mijn geval wilde ik NodeJS draaien en het console-venster open houden nadat NodeJS is gestopt. Hier was mijn oplossing:

Bestand: RunNodeJS.bat

@echo off
cd /d c:\
cmd.exe /k cmd /c node

Ik heb toen een snelkoppeling gemaakt naar dat bestand op mijn bureaublad en dubbelklik op de snelkoppeling om een cmd.exe console te starten die het node commando uitvoert en open blijft nadat het (het node commando) is afgesloten.

Ik heb cmd.exe /k cmd /c node gebruikt vanwege een ander antwoord dat hier is gegeven.

0
0
0
2017-06-30 03:30:27 +0000

In antwoord op de gedegradeerde PSIXO - “Dit antwoord werd al behandeld in de vraag. - Ro Yo Mi 20 ‘16 jan om 5:06” – NEE, dat was het NIET. De vorige antwoorden waren: “Pauze”, wat NIET werkte. Het antwoord van PSIXO was: “& pauze”, wat wel werkt. Gelieve voorzichtiger te ontleden voordat u een lagere rangorde aanneemt. Ik heb dit uitgevoerd vanaf een IDLE prompt, en het werkte:

>>> os.system('dir ^ & pause')
    0
    >>>

Aan de andere kant:

>>> os.system('dir ^ pause')
    1
    >>>

Werkte NIET (de cmd prompt blies om, en gaf in feite een fout terug (1)). Met dank aan PSIXO voor het antwoord dat ik nodig had. Henry.