Das geht mit dem CHOICE-Befehl:

choice /C Wahlmöglichkeiten /T Zeitlimit /D Standardwert
if %errorlevel% == 3 goto Irgendwas
if %errorlevel% == 2 goto WasAnderes
>> Befehle, wenn nix eingegeben wird <<

Bei "Wahlmöglichkeiten" gibst du alle Buchstaben und Ziffern ein, die gedrückt werden können. Der Benutzer kann nicht mehr als 1 Buchstaben oder 1 Ziffer eingeben.

Bei "Zeitlimit" gibst du die Anzahl Sekunden ein, nach deren Ablauf spätestens fortgefahren werden soll.

Die Wahlmöglichkeiten prüfst du mit IF-Befehlen, die den Errorlevel auslesen. CHOICE legt den so fest, dass der erste Buchstabe eine 1 ergibt, der zweite Buchstabe eine 2 usw.

Beispiel:

choice /C JNA /T 10 /D J
if %errorlevel% == 3 goto Abbrechen
if %errorlevel% == 2 goto Nein
echo Du hast J eingegeben oder 10 Sekunden gewartet.

Hi ist "J" der erste Buchstabe, "N" der zweite und "A" der dritte.

...zur Antwort

Da CMD sich selbst beenden würde, wenn du den Prozess "cmd.exe" versuchst zu killen, musst du über die Prozess-ID gehen. Die findest du raus mit Hilfe einer Befehlsreihe aus FOR, FINDSTR und TASKLIST:

title asdfghuio
FOR /F "tokens=2" %A IN ('tasklist /NH /V /FI "imagename eq cmd.exe" ^| findstr /V asdfghuio') DO taskkill /PID %A

Als Erkennungsmerkmal für das aktuell gestartete CMD-Fenster legst du den Fenstertitel "asdfghuio" fest oder irgendwas anderes einzigartiges, was in der Batchdatei wohl nicht als Titel steht.

Der TASKLIST-Befehl listet alle gestarteten Prozesse auf. /NH entfernt die Überschriften (No Header). /V zeigt mehr Infos an, darunter auch den Fenstertitel. /FI initiiert einen Filter, hier "cmd.exe" als Prozessname.

In der Ausgabe des TASKLIST-Befehls schließt der FINDSTR-Befehl alle Zeilen aus, die "asdfghuio" enthalten, was wohl nur das aktuelle CMD-Fenster sein dürfte. Übrig bleiben alle "cmd.exe"-Prozesse außer dem aktuellen Fenster.

Für jeden gefundenen Prozess wird der TASKKILL-Befehl verwendet, der aber nicht "cmd.exe" beendet, sondern den Prozess mit der Prozess-ID "%A".

...zur Antwort

Benutz zwei >>

...zur Antwort

Das geht gar nicht mit IF, dazu musst du die Prozesse überprüfen:

tasklist /NH /FI "imagename eq [Prozess.exe]" | findstr /i /C:"[Prozess.exe]" >nul 2>nul || start Datei

Der TASKLIST-Befehl listet alle gestarteten Prozesse auf. "/NH" steht für "No Header", wodurch die Überschriften weggelassen werden. Auf /FI folgt ein Filter, "eq" bedeutet "equals". Es werden also alle gestarteten Prozesse namens "Prozess.exe" aufgelistet.

Mit Hilfe von " | " bezieht sich der Folgebefehl auf den Output des vorigen Befehls. FINDSTR sucht also "Prozess.exe" in dem Output des TASKLIST-Befehls. "/i" ignoriert Groß- und Kleinschreibung. "/C:" sucht nach der folgenden Zeichenfolge auch mit Punkt (ohne /C würde er nach "Prozess" und nach "exe" suchen).

">nul 2>nul" unterdrücken die Ausgabe des FINDSTR-Befehls. Die brauchen wir nicht, wir wollen nur wissen, ob der Befehl was gefunden hat oder nicht.

Mit " || " wird der folgende Befehl nur ausgeführt, wenn der vorangegangene erfolglos war. Das Gegenstück dazu ist "&&".

Das ganze funktioniert nur bei Dateien, die als Prozess ausgeführt werden. Batchdateien hingegen werden über CMD.EXE ausgeführt. Um zu prüfen, ob eine bestimmte Batchdatei geöffnet ist, musst du wissen, welchen Titel das CMD-Fenster mit der Batchdatei hat:

tasklist /NH /FI "imagename eq cmd.exe" /FI "windowtitle eq [Fenstertitel]" | findstr /i /C:"cmd.exe" >nul 2>nul || start Datei

Damit das funktioniert, musst du den genauen Fenstertitel wissen, nicht nur einen Teil davon. Suchst du z. B. nach "Fenster" im Fenstertitel, während der Titel eigentlich "Fenster 1" ist, findet CMD es nicht.

...zur Antwort

Komisch... bei mir funktioniert der Befehl einwandfrei mit "Doof:)Miep" als Inhalt von %Var% und auch mit "Doof:(Mi()ep".

Welche Fehlermeldung bekommst du denn?

...zur Antwort

Wenn es nur die erste Zeile ist, dann geht

set /p irgendwas=<"Dateiname.Endung"

Wenn du einen bestimmten Teil speichern willst, kannst du mit dem FOR/F-Befehl danach suchen. Dazu musst du genau wissen, wie der Inhalt der gesuchten Zeile aussieht. Willst du z. B. von "Lebenspunkte=100" die "100" rausziehen, geht der Befehl

FOR /F "tokens=1,2 delims==" %%A IN ('type "Datei.Endung"') DO if "%%A" == "Lebenspunkte" set HP=%%B

Mehrere Zeilen in eine Variable zu speichern ist zwar möglich, allerdings kannst du diese funktionell nicht mehr verwenden. Das bedeutet, du kannst es nur noch über den ECHO-Befehl ausgeben lassen:

Setlocal EnableDelayedExpansion
set LF=^

FOR /F "delims=" %%A IN ('type "Datei.Endung"') DO set irgendwas=!irgendwas!%%A!LF!

"LF" steht für "Line Feed", in deutsch "Zeilenumbruch". Durch den SET-Befehl gefolgt von zwei Leerzeilen, die du nicht entfernen darfst, kann man den abspeichern und mit !LF! verwenden. Da du !irgendwas! aber in der FOR-Schleife mehrfach festlegst, musst du es mit Hilfe des SETLOCAL-Befehls aufrufen, wodurch die Funktionalität verloren geht.

Besteht der gespeicherte Wert also aus Batchbefehlen, kannst du diese nicht durch %irgendwas% ausführen.

...zur Antwort

Du legst in deinem SET-Befehl die Variable Sprachausgabe" mit Anführungszeichen am Ende fest. Dann musst du auch %Sprachausgabe"% benutzen.

Besser wäre

set /p Sprachausgabe=^> 
...zur Antwort
echo md "%%random%%" >> 1.txt
...zur Antwort
if %Variable% GTR 20 if %Variable% LSS 50 echo Zwischen 20 und 50.
...zur Antwort

TASKLIST gibt immer "Erfolg" als Antwort. Du kannst aber über den FINDSTR-Befehl arbeiten:

tasklist /fi "Imagename eq taskmgr.exe" | findstr /i /C:"taskmgr.exe" >nul 2>nul && goto run || goto notrun
...zur Antwort

Die Variable darf im SET-Befehl nicht in %-Zeichen stehen (Zeile 2+3 und 8+9).

Beim IF-Befehl musst du anstelle von ">" "GTR" für "GreaTeR than" nehmen (Zeile 8+9).

Beim ersten IF-Befehl fehlt beim SET-Befehl das Gleichheitszeichen (und der Variablenname) (Zeile 8).

...zur Antwort

1. Task-Manager starten

2. Datei > Neuen Task ausführen > "cmd.exe"

3. Gib folgendes ein:

cd "%userprofile%\Desktop"
FOR /F "delims=" %%A IN ('dir /AD /B') DO @rd %%A
start explorere.exe

Damit wechselst du auf deinen Desktop (CD = Change Directory). Auf dem Desktop liegen unzählige leere Ordner mit mehreren Ziffern als Namen. Mit dem RD-Befehl (Remove Directory) löschst du jeden einzeln. Dabei werden die Ordner mit Hilfe des DIR-befehls und des FOR-Befehls aufgezählt.

Sämtliche Ordner mit Inhalten bleiben beibehalten. Anschließend wird der Explorer gestartet.

...zur Antwort
FOR /F "delims=" %%A IN ('dir /B %date%_*.txt') DO set LastFile=%%A
FOR /F "tokens=4 delims=_." %%A IN ("%LastFile%") DO set /a LastFile=%%A + 1

FOR /L %%i IN (%LastFile%,1,%eingabe%) do echo.>> %date%_%%i.txt

Das speichert zuerst den Namen der zuletzt gefunden Datei vom heutigen Datum, zieht dann die Nummer aus ihr raus und addiert 1.

...zur Antwort

Wenn sicher ist, dass immer nur zwei Wörter gesucht werden, geht:

FOR /F "tokens=2,4 delims=;" %%A IN ("%VARIABLE1 %") DO (
  set VARIABLE2=%%A
  set VARIABLE3=%%B
)

Wenn es auch mehr oder weniger als zwei Wörter sein können, würde ich über den SHIFT-Befehl gehen:

Setlocal EnableDelayedExpansion
set WordNo=1
set VARIABLE1 =%VARIABLE1 :"={%
set VARIABLE1 =%VARIABLE1 :;="%

call :Function_ExtractEnclosed %VARIABLE1 %
FOR /L %%A IN (2,1,!WordNo!) DO set VARIABLE%%A=!Variable%%A:{="!
set VARIABLE1 =%VARIABLE1 :"=;%
set VARIABLE1 =%VARIABLE1 :{="%

[...]

exit

:Function_ExtractEnclosed
  if %1 == "%~1" (
    set /a WordNo+=1
    set VARIABLE!WordNo!=%~1
  )
  shift /1
  if "%~1" == "" exit /b
goto Function_ExtractEnclosed

Dieser Code ersetzt zuerst alle Anführungszeichen in VARIABLE1 mit { und dann alle Semikolon mit Anführungszeichen. Das ist wichtig, damit der SHIFT-Befehl korrekt arbeitet. Dabei hilft das { nur, dass die neuen Anführungszeichen mit den alten nicht in Konflikt geraten. Der ursprüngliche Wert wird später wiederhergestellt.

Anschließend ruft der Code eine Funktion auf (CALL-Befehl) mit VARIABLE1 als Parameter.

Die Funktion prüft, ob der nächste Parameter von Anführungszeichen umschlossen ist. Ist das der Fall, handelt es sich um ein gesuchtes Wort. Dann wird es in der nächsten Variable abgespeichert.

Sind alle Parameter abgearbeitet, beendet sich die Funktion (EXIT /B).

Anschließend werden in sämtlichen Variablen die Anführungszeichen wiederhergestellt.

Ein Tipp übrigens: Benutz in den Namen von Variablen keine Leerzeichen. Das kann zu Verwirrung führen.

...zur Antwort

Ganz einfach: mit dem FTP-Befehl.

Anders als im aktiven CMD-Fenster musst du in Batch eine automatisierte Version laufen lassen, was nur mit Hilfe einer separaten Datei geht. Die lässt du mit Hilfe des ECHO-Befehls erstellen und rufst sie anschließend auf.

Hier ein Beispiel:

echo open [Adresse zum FTP-Server]>FTP-Datei.tmp
echo user [Benutzername]>>FTP-Datei.tmp
echo [Passwort]>>FTP-Datei.tmp
echo ascii>>FTP-Datei.tmp
echo cd [Pfad/zum/Zielordner]>>FTP-Datei.tmp
echo get [Dateiname.txt]>>FTP-Datei.tmp
echo bye>>FTP-Datei.tmp

ftp -n -s:FTP-Datei.tmp
del /F FTP-Datei.tmp

Der Code erstellt die "FTP-Datei.tmp" mit den gewünschten Befehlen. "CD" wechselt das Verzeichnis auf dem Server, alle anderen Befehle sind selbsterklärend. Die eckigen Klammern musst du weglassen, die sollen nur zeigen, dass du dort etwas ersetzen musst.

Anschließend wird die Datei mit dem FTP-Befehl aufgerufen. "-n" bewirkt, dass dich der Server nicht nach Anmeldedaten fragt, sondern du sie automatisch übergibst. "-s" bewirkt, dass FTP sich die Befehle aus der Datei zieht.

Am Ende wird die erstellte Datei wieder gelöscht.

...zur Antwort

Ich fürchte, da bist du in Batch an eine Grenze gestoßen. SET/P wird beendet, sobald der Benutzer seine Eingabe mit "Enter" bestätigt. Würde CMD jede Taste als "Enter" verstehen, würde SET/P sofort enden.

Auch die Idee, alle Tasten als "Enter" zu verstehen, ist ohne den DEBUG-Befehl nicht umsetzbar, welcher aber auf 64-bit-Systemen nicht mehr nutzbar ist. Auf 32-bit-Systemen würde der DEBUG-Befehl allerdings so viel Rechenleistung in Anspruch nehmen, dass sie ihr der Nutzen nicht gerecht wird.

PS: "Ergebnis" schreibt man mit einem S. :-)

...zur Antwort