Ich habe eine Batch-Datei, die das Kopieren einer Reihe von Dateien von einem Ort zum anderen und zurück für mich automatisiert. Das Einzige ist, dass es mir hilft, diesen Befehl versehentlich aus meinem Befehlspuffer auszuwählen und nicht festgeschriebene Änderungen massenhaft zu überschreiben.
Welchen Code würde ich für meine .bat-Datei benötigen, damit sie "Sind Sie sicher" sagt und "y" eingibt, bevor der Rest der Datei ausgeführt wird? Wenn etwas anderes als "y" eingegeben wird, sollte die Ausführung in dieser Zeile beendet werden.
Bearbeiten 27. November Ok, ich habe dies erneut als unbeantwortet markiert, da ich es immer noch nicht herausfinden kann. Wenn ich "exit" rufe; es schließt cmd.exe, was nicht das ist, was ich will. All dies, weil Windows den Befehlspuffer falsch implementiert hat [anders als ich es zumindest gewohnt bin]
quelle
SET AREYOUSURE=N
vor der Eingabeaufforderung, um die Auswahl zu löschen, wenn Sie das Skript bereits zuvor in diesem Befehlsfenster ausgeführt haben. Ohne diese Option bleibt die Standardeinstellung die zuvor ausgewählte Auswahl.setlocal
und dasendlocal
sich darum kümmern sollten.%AREYOUSURE%
wird nach dem nicht mehr existierenendlocal
.Versuchen Sie den Befehl CHOICE , z
quelle
Der
choice
Befehl ist nicht überall verfügbar. Bei neueren Windows-Versionen bietet derset
Befehl die/p
Option, Benutzereingaben abzurufensiehe
set /?
für weitere Informationenquelle
Für Benutzeransagen in der Windows-Befehlszeile stehen zwei Befehle zur Verfügung:
/P
für alle Windows NT-Versionen mit aktivierten Befehlserweiterungen undeinstellen ist ein interner Befehl des Windows-Befehlsprozessors
cmd.exe
. Die Option/P
, einen Benutzer zur Eingabe einer Zeichenfolge aufzufordern, ist nur mit aktivierten Befehlserweiterungen verfügbar, die standardmäßig aktiviert sind, da sonst fast keine Batchdatei mehr funktionieren würde.choice.exe ist eine separate Konsolenanwendung (externer Befehl) in
%SystemRoot%\System32
.choice.exe
von Windows Server 2003 kann%SystemRoot%\System32
zur Verwendung unter Windows XP in ein Verzeichnis auf einem Windows XP-Computer kopiert werden, wie viele andere Befehle, die unter Windows XP nicht standardmäßig, unter Windows Server 2003 jedoch standardmäßig verfügbar sind.Es wird empfohlen, die Verwendung von CHOICE der Verwendung von SET / P vorzuziehen aus folgenden Gründen :
/C
(und Ctrl+C) angegeben wurden, und gibt einen Fehlerton aus, wenn der Benutzer eine falsche Taste drückt.echo Y | call PromptExample.bat
bei Verwendung aufruft aufruft, beispielsweise CHOICE .cmd
aufgrund eines Syntaxfehlers zum Beenden der Ausführung der Batchdatei führt, oder zur Ausführung von Befehlen, die in der Batchdatei überhaupt nicht enthalten sind gut codierte Batch-Datei. Es bedarf einiger Anstrengungen, um SET / P zu erhalten gegen versehentliche oder absichtlich falsche Benutzereingaben zu schützen.Hier ist ein Beispiel für eine Eingabeaufforderung mit bevorzugter WAHL und alternativ SET / P ein
choice.exe
, das auf einem verwendeten Computer unter Windows nicht verfügbar ist.Hinweis: Diese Batchdatei verwendet Befehlserweiterungen, die unter Windows 95/98 / ME nicht verfügbar sind
command.com
anstelle voncmd.exe
als Befehlsinterpreter.Die Befehlszeile
set "UserChoice=!UserChoice: =!"
wird hinzugefügt, um das Aufrufen dieser Batchdatei unterecho Y | call PromptExample.bat
Windows NT4 / 2000 / XP zu ermöglichen, ohne dass die Verwendung von erforderlich istecho Y| call PromptExample.bat
. Es löscht alle Leerzeichen aus der Zeichenfolge, aus der gelesen wird STDIN Zeichenfolge, bevor die beiden Zeichenfolgenvergleiche ausgeführt werden.echo Y | call PromptExample.bat
führt dazu, dass YSPACE der Umgebungsvariablen zugewiesen wirdUserChoice
. Dies würde dazu führen, dass die Eingabeaufforderung zweimal verarbeitet wird, da"Y "
weder die Groß- und Kleinschreibung gleich ist,"N"
noch"Y"
ohne zuerst alle Leerzeichen zu löschen. SoUserChoice
mit YSPACE als Wert bei der Führung das prompt ein zweites Mal mit der Option würdeN
als als Standard in der Batch - Datei auf dem zweiten prompte Ausführung des nächste zu einem unerwarteten Ausgang der Stapelverarbeitung definiert. Ja, die sichere Verwendung von SET / P ist wirklich schwierig, nicht wahr?Weitere Informationen zur Verwendung von SET / P und CHOICE, um den Benutzer zur Auswahl aus einer Liste von Optionen aufzufordern , finden Sie unter Antwort auf So verhindern Sie, dass der Windows-Befehlsinterpreter die Ausführung von Batchdateien bei einer falschen Benutzereingabe beendet.
Noch ein paar Hinweise:
UserChoice
mitN
undY
, sondern der Wert vonUserChoice
umgeben von"
mit"N"
und"Y"
.EQU
undNEQ
sind primär für den Vergleich zweier Ganzzahlen im Bereich von -2147483648 bis 2147483647 und nicht für den Vergleich zweier Zeichenfolgen ausgelegt.EQU
undNEQ
funktionieren auch für Zeichenfolgenvergleiche, führen jedoch zum Vergleichen von Zeichenfolgen in doppelten Anführungszeichen bei einem nutzlosen Versuch, die linke Zeichenfolge in eine Ganzzahl umzuwandeln.EQU
undNEQ
kann nur mit aktivierten Befehlserweiterungen verwendet werden. Die Vergleichsoperatoren für Zeichenfolgenvergleiche sind==
undnot ... ==
funktionieren auch mit deaktivierten Befehlserweiterungen, da sie auchcommand.com
von MS-DOS und Windows 95/98 / ME bereits unterstützt werden. Weitere Informationen zu IF- Vergleichsoperatoren finden Sie unter Symbol, das NEQ, LSS, GTR usw. in Windows-Batchdateien entspricht .goto :EOF
erfordert aktivierte Befehlserweiterungen, um die Batchdateiverarbeitung wirklich zu beenden. Weitere Informationen finden Sie unter Wohin kehrt GOTO: EOF zurück?Um die verwendeten Befehle und ihre Funktionsweise zu verstehen, öffnen Sie ein Eingabeaufforderungsfenster, führen Sie dort die folgenden Befehle aus und lesen Sie alle Hilfeseiten, die für jeden Befehl angezeigt werden, sorgfältig durch.
choice /?
echo /?
endlocal /?
goto /?
if /?
set /?
setlocal /?
Siehe auch:
Es wird der Grund für die Verwendung der Syntax
set "variable=value"
beim Zuweisen einer Zeichenfolge zu einer Umgebungsvariablen erläutert .if errorlevel X
Verhalten und Bediener&
.|
und der Behandlung von STDIN .SystemRoot
.quelle
CHOICE.COM
standardmäßig unter MS-DOS 6.0, MS-DOS 7.0, Windows 95 und Windows 98 verfügbar. Unterchoice.exe
Windows NT4, Windows 2000 und Windows XP war sie jedoch standardmäßig nicht installiert.CHOICE.COM
könnte auch unter NT4, Windows 2000 und Windows XP verwendet werden, es wäre jedoch besser, 32-Bitchoice.exe
aus dem entsprechenden Ressourcen-Kit zu verwenden. Siehe Rob van der Woudes Seite über WAHL . Die Optionen unterscheiden sich teilweise zwischenCHOICE.COM
undchoice.exe
. Die Frage bezieht sich jedoch nicht auf DOS.Hier etwas einfacher:
oder
quelle
%errorlevel%
ist immer ein ganzzahliger Wert. Siehe hier für die Dokumentation einschließlich eines Beispiels.Hier ist meine Methode für eine Ja / Nein- Antwort.
Es wird auch nicht zwischen Groß- und Kleinschreibung unterschieden.
Dies prüft nur auf die durch die Eingabe angegebenen Fehler und setzt die
choice
Variable auf das, was Sie benötigen, damit sie unten im Code verwendet werden kann.quelle
Wenn Sie möchten, dass das Stapelverarbeitungsprogramm zur Eingabeaufforderung zurückkehrt und die Eingabeaufforderung (AKA cmd.exe) nicht schließt, können Sie "exit / b" verwenden.
Dies kann helfen.
Oder wenn Sie nicht so viele Zeilen verwenden möchten ...
Hoffe das hilft...
quelle
Hier ist ein einfaches Beispiel, das ich in einem Sicherungsskript (.bat / batch) unter Windows 10 verwende, mit dem ich beim Erstellen von Sicherungen verschiedene Optionen haben kann.
Sie können so viele dieser Blöcke haben, wie Sie benötigen.
quelle
Öffnen Sie zuerst das Terminal.
Geben Sie dann ein
Öffnen Sie anschließend .sure und fügen Sie diese ein.
Schließen Sie danach die Datei.
Dies gibt Ihnen eine Aufforderung, ob Sie sicher sind, bevor Sie den Befehl fortsetzen.
quelle
Terminal öffnen. Geben Sie Folgendes ein
Fügen Sie dies sicher ein
Schließen Sie sure.sh und geben Sie dies in Terminal ein.
Wenn Sie nun vor der Eingabe des Befehls sicher eingeben, erhalten Sie eine Aufforderung zur Gewissheit, bevor Sie den Befehl fortsetzen.
Hoffe das ist hilfreich!
quelle