cmd schließt sich nach öffnen einer batch datei, pause hilft auch nicht?


04.12.2021, 18:33

nach jeden befehl schließt sich die cmd sofort

auch wenn ich nach einer zeile "pause" schreibe es schließt sich direkt nach den drücken einer beliebigen taste

3 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Dann läuft der Befehl vermutlich auf einen Error, der die Batch schließt oder deiner erste Zeile ist Exit.

EDIT: nachdem ich den Code gesehen habe, einfach

cmd

am Ende einfügen, hält das Fenster offen weil das callen einer (auch nicht existenten) Untercmd die Schließung des Hostfensters verhindert.

oder die batch durch andere batch mit Kommando

cmd /k batch.bat

starten


Mzakh 
Beitragsersteller
 04.12.2021, 18:36

Ping wird ausgeführt

3 mal kommt eine antwort, und sobald er die 4te antwort schicken will schließt sich die cmd

manchmal kann man ganz kurz sehen wie der text grün wird

Mzakh 
Beitragsersteller
 04.12.2021, 18:40
@Kaleopan

wird ausgeführt aber sobald ich dann eine taste drücke schließt es sich sofort

Kaleopan  04.12.2021, 18:44
@Mzakh

Du kannst dir eine 2. Batchdatei erstellen und die erste mit

cmd /k erste batch

aufrufen.

Kaleopan  04.12.2021, 18:47
@Kaleopan

Oder

cmd

als letzte Zeile anfügen, hält das Fenster ebenfalls offen.

Kaleopan  04.12.2021, 18:52
@Mzakh

Hab noch eine 2. Lösung eingefügt, aber falsch kommentiert.

Deinem echo folgen ungeschützt Steuerzeichen wie & oder %. Dies löst einen Syntaxfehler aus, welcher die Batch beendet.

Um die Steuerzeichen &|<> als Text zu kennzeichnen müssen diese innerhalb von "Gänsefüßche" stehen oder durch ein Carret^ maskiert(escaped) werden.

echo "blah&blubb"
echo blah^&blubb

Das %-Zeichen kennzeichnet einzusetzende Variablen.

echo Name dieses Profils: %UserName%

soll ein % als Text ausgegeben werden muss dies verdoppelt werden:

echo 100%%

Batch ist keine einfache Sprache, was die Syntax angeht.

Bereits vor längerer Zeit habe ich einen Narrensicheren Workaround entwickelt, welcher sich nicht um Sonderzeichen schert. Dieser beruht darauf, das echo Text welcher in der Laufvariable eines For/f-Loops an echo übergeben wird erst zur Laufzeit von echo dargestellt wird. (eine Laufvariable enthält immer nur Text)

Subroutine :DrawASCIILogo sucht in der Batch nach dem Beginn des Logos ::::Begin Name.logo und gibt alle Zeilen aus (wie sie sind) bis zu einem ::::End.logo::::

textlogos.cmd

@echo off
chcp 65001 >nul
  rem rufe Subroutine  auf ,welche das Logo zeichent...
call :DrawASCIILogo "Erzesel.Flower"
echo:
echo nächstes Logo:
call :DrawASCIILogo "Erzesel.Crazy"
echo:
echo nächstes Logo:
call :DrawASCIILogo "Radiation"
echo:
echo nächstes Logo:
call :DrawASCIILogo "Erzesel.Gotic"
echo:
echo nächstes Logo:
call :DrawASCIILogo "Sonderzeichentest"
echo:
pause
exit /b




:DrawASCIILogo
  rem finde die Anfangszeile des Bildes in dieser Batch
set "toSkip="
set "beginMark=::::Begin %~1.logo"
for /f "skip=2 tokens=1 delims=[]" %%a in ('find /n "%beginMark%" "%~f0"') do (set "toSkip=%%a")
if not defined toSkip (
    echo LogoMarker: "%beginMark%" nicht gefunden!
    exit /b 1
)
for /f "usebackq skip=%toSkip% tokens=* delims=" %%t in ("%~f0") do (
    if /i "%%~t"=="::::End.logo::::" exit /b 0
    echo %%t
)
exit /b


::Logo(s)  nach folgendem Muster kennzeichen:
::::Begin Erzesel.Flower.logo
    .-''-.  .-------.      ____..--'    .-''-.     .-'''-.     .-''-.    .---.     
  .'_ _   \ |  _ _   \    |        |  .'_ _   \   / _     \  .'_ _   \   | ,_|     
 / ( ` )   '| ( ' )  |    |   .-'  ' / ( ` )   ' (`' )/`--' / ( ` )   ',-./  )     
. (_ o _)  ||(_ o _) /    |.-'.'   /. (_ o _)  |(_ o _).   . (_ o _)  |\  '_ '`)   
|  (_,_)___|| (_,_).' __     /   _/ |  (_,_)___| (_,_). '. |  (_,_)___| > (_)  )   
'  \   .---.|  |\ \  |  |  .'._( )_ '  \   .---..---.  \  :'  \   .---.(  .  .-'   
 \  `-'    /|  | \ `'   /.'  (_'o._) \  `-'    /\    `-'  | \  `-'    / `-'`-'|___ 
  \       / |  |  \    / |    (_,_)|  \       /  \       /   \       /   |        \
   `'-..-'  ''-'   `'-'  |_________|   `'-..-'    `-...-'     `'-..-'    `--------`
::::End.logo::::


::::Begin Erzesel.Crazy.logo
                                                                                     .---.
      __.....__                             __.....__                  __.....__     |   |
  .-''         '.                       .-''         '.            .-''         '.   |   |
 /     .-''"'-.  `. .-,.--.            /     .-''"'-.  `.         /     .-''"'-.  `. |   |
/     /________\   \|  .-. |          /     /________\   \       /     /________\   \|   |
|                  || |  | |.--------.|                  |    _  |                  ||   |
\    .-------------'| |  | ||____    |\    .-------------'  .' | \    .-------------'|   |
 \    '-.____...---.| |  '-     /   /  \    '-.____...---. .   | /\    '-.____...---.|   |
  `.             .' | |       .'   /    `.             .'.'.'| |// `.             .' |   |
    `''-...... -'   | |      /    /___    `''-...... -'.'.'.-'  /    `''-...... -'   '---'
                    |_|     |         |                .'   \_.'
                            |_________|
::::End.logo::::


::::Begin Radiation.logo
                XXXXXXX
           X XXXXXXXXXXXXX X
        X     XXXXXXXXXXX     X
      X        XXXXXXXXX        X
     X          XXXXXXX          X
    X            XXXXX            X
   X              XXX              X
   X               X               X
   XXXXXXXXXXXXXXX   XXXXXXXXXXXXXXX
    XXXXXXXXXXXXX     XXXXXXXXXXXXX
     XXXXXXXXXXX       XXXXXXXXXXX
      XXXXXXXXX         XXXXXXXXX
        XXXXXX           XXXXXX
          XXX             XXX
              X         X
                   X
::::End.logo::::


::::Begin Erzesel.Gotic.logo
  ,- _~,                             ,, 
 (' /| /                             || 
((  ||/= ,._-_ /\\  _-_   _-_,  _-_  || 
((  ||    ||    /  || \\ ||_.  || \\ || 
 ( / |    ||   /\\ ||/    ~ || ||/   || 
  -____-  \\,   || \\,/  ,-_-  \\,/  \\ 
                /                       
               (,
::::End.logo::::


::::Begin Sonderzeichentest.logo
(((((((((%blub%)))))))))
(((((((((&|> blah <|&)))))))))
::::End.logo::::




Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
auch wenn ich nach einer zeile "pause" schreibe es schließt sich direkt nach den drücken einer beliebigen taste

Das ist der Sinn von pause. Es pausiert bis du eine Taste drückst.

Falls dich die 'Taste Drücken' Zeile stört:

pause >nul
exit

Ansonsten.. was willst du denn erreichen?


Kaleopan  04.12.2021, 18:50

Dass die Kommandozeile offen bleibt.