cmd schließt sich nach öffnen einer batch datei, pause hilft auch nicht?
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
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
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
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
[40;38;5;226m 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[0m
::::End.logo::::
::::Begin Erzesel.Gotic.logo
,- _~, ,,
(' /| / ||
(( ||/= ,._-_ /\\ _-_ _-_, _-_ ||
(( || || / || \\ ||_. || \\ ||
( / | || /\\ ||/ ~ || ||/ ||
-____- \\, || \\,/ ,-_- \\,/ \\
/
(,
::::End.logo::::
::::Begin Sonderzeichentest.logo
(((((((((%blub%)))))))))
(((((((((&|> blah <|&)))))))))
::::End.logo::::
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?
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