Unerwartete "Das system kann das Laufwerk nicht finden spezifiziert." in batch-Datei
Ich habe ein problem mit einer batch-Datei (Windows 7 x64). Ich habe es geschafft es zu reduzieren, um die folgenden (es sind zwei leere Kommentarzeilen; es scheint nicht zu Rolle, ob es einen tatsächlichen Kommentar):
@echo off
if /i [%1]==[] (
echo A
::
::
echo B
)
Setzen diese in eine batch-Datei und dann läuft es ohne Parameter erzeugt die folgende Ausgabe:
A
The system cannot find the drive specified.
B
Löschen eine der ::
Linien oder löschen der umliegenden if
, behebt Dinge, so dass Sie erhalten die erwartete Ausgabe:
A
B
Was ist denn hier Los? Warum ist es auf der Suche für ein Laufwerk?
Bearbeiten
Danke für die Antworten soweit. Also meine Frage läuft darauf hinaus, diese:
Was sind die Regeln für die Bestimmung, ob
::
bedeutet "Anfang Kommentar" oder "drive letter Doppelpunkt"?
Vielleicht ist es einfacher, einfach Schalter zurück zu REM
für das hinzufügen von Kommentaren, so gibt es keinen Raum für Zweideutigkeiten, aber ich finde die ::
Stil leichter zu Lesen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein obscoure Effekt im batch-code-Blöcke.
In einem code-block ein label in einer Zeile erfordert immer eine sekundäre Linie mit einem ganz anderen syntax (Regeln für eine sekundären Linie).
ALSO: goto-Befehl funktioniert nicht
Die sekundäre Linie muss ein Befehl oder einfache Aufkleber, aber nicht eine Klammer noch ein Doppel-Doppelpunkt noch ein interner Befehl angehängt mit einer Klammer.
MC ND erklärte, dass die
:
ist hier verwendet wie ein normales Laufwerk Brief, das ist wirklich wahr!Aber nur in der Sekundär-line und du kannst sogar unterdrücken, den Fehler durch eine
subst :: C:\
, die Linie wird behandelt wie ein label (können Sie gar nichts anfangen).Und die sekundäre Linie akzeptiert
&
sogar, wenn Sie die Zeile einen label.Versagenden Proben
Und jetzt arbeiten
Manchmal
::
wird als Kommentar-Stil, dies kann Probleme verursachen, innerhalb blockiert, wenn Sie nicht kümmern, über die sekundäre Leitung.Edit: Um die Antwort auf Ihre zweite Frage
Den ersten
::
ist immer ein Kommentar oder eine Bezeichnung, in der nächsten Zeile, es ist immer einedrive letter colon
.::
, und der Grund, warum das, was du sagtest. Erste Zeile ist ein label und zweitens wird erwartet, dass ein Gültiger Befehl, und als :: gültig betrachtet werden kann, wird es ausgeführt. Und, ja, Sie können etwas anfangen mitstart ::\windows\system32\calc.exe
. Wie kommentierte, bevor nicht alle Teile des Systems umzugehen.::
ist ein gültiges Laufwerk. Nur alsc:
oderd:
aber der Brief ist:
So, deine Zeilen sind zu ändern versuchen, aus der aktuellen Laufwerk zu Laufwerk
::
Beispiel: versuchen Sie
subst :: c:\
und danndir ::\
::
ist nicht ein "voll befriedigend" - Laufwerk,subst
ohne Parameter nicht angezeigt werden dieser.mountvol c: /L
. Für mich sind beide das gleiche Volumen haben. Aber ja, sind nicht alle Werkzeuge im system arbeiten.echo x
zwischen den beiden::
Linien?