FEHLER? Es kann keine Datei mit '=' über die Befehlszeile ECHO und COPY CON erstellt werden

327
gerryLowry

WO ist die Dokumentation, die das scheinbar anomale Verhalten des Gleichheitszeichens unten erklärt?

SCHRITTE ZU REPRODUZIEREN (an einer Eingabeaufforderung):

Beispiel mit ECHO:

H:\BUGS>echo abc > a-b.txt H:\BUGS>echo cde > c=d.txt H:\BUGS>dir 2016-03-13 19:54 6 a-b.txt 2016-03-13 19:54 12 c H:\BUGS>type a-b.txt abc H:\BUGS>type c cde =d.txt 

Anmerkungen:
Datei c :

636465203D642E7478740D0A  c d e = d . t x t  

Datei ab.txt :

616263200D0A  a b c  

HOWEVER (hier wird das '=' Teil der gültigen Dateinamen, wenn ich Anführungszeichen verwende):

H:\BUGS>ren a-b.txt a=b.txt The syntax of the command is incorrect.  H:\BUGS>ren a-b.txt "a=b.txt" H:\BUGS>ren c "c=d.txt" H:\BUGS>dir 2016-03-13 19:54 6 a=b.txt 2016-03-13 19:54 12 c=d.txt 

Ein Gleichheitszeichen ist ein gültiges Zeichen für den Dateinamen.

FWIW, es scheint, dass ein '=', das nicht in Anführungszeichen steht, in einer DOS-Befehlszeile eine bizarre spezielle Bedeutung hat.

OTOH, das '=' ist ein gültiges Zeichen für den Dateinamen.

" Benennen von Dateien, Pfaden und Namespaces "

unter Windows 8.1

bearbeiten:

H:\BUGS>echo def > "d=e.txt" H:\BUGS>dir 2016-03-13 20:36 6 d=e.txt H:\BUGS>type "d=e.txt" def 

die obige Syntax funktioniert.

Bearbeitung beenden.

edit # 2:

Michael Frank hat mir geholfen, weitere Informationen zu finden.

Seine Informationen ermöglichten es mir, einen interessanten SO-Artikel zu finden " Cmd-Komma, um Parameter im Vergleich zum Weltraum zu trennen? "

H:\BUGS>type Frank.cmd @echo %1/%2/%3  H:\BUGS>Frank 1 2 3 1/2/3  H:\BUGS>Frank 1=2=3 1/2/3  H:\BUGS>Frank 1;2;3 1/2/3  H:\BUGS>Frank 1,2,3 1/2/3  H:\BUGS>Frank 1/2/3 1/2/3// 

Im obigen werden verschiedene Zeichen als Trennzeichen verwendet.

Wenn /oben als Trennzeichen verwendet wurde, wird ein Extra /ausgegeben. das wäre ein Fehler imho.

Bei " cmd- comma zum Trennen von Parametern im Vergleich zum Leerzeichen? ", schrieb Tim Robinson " unter Windows sind Programme dafür verantwortlich, ihre eigenen Befehlszeilen zu parsen. Die Shell analysiert Umleitungen und Pipes und übergibt dann die restliche Befehlszeile an das Programm in eine Zeichenfolge "

UNTENLINIE: Es scheint, =als würde ein Trennzeichen als Trennzeichen fungieren. In einigen Fällen =führt dies zu einem Syntaxfehler, in anderen Fällen =handelt es sich lediglich um ein Gleichheitszeichen .

Ende bearbeiten # 2.

0
Die Suche nach einer Erklärung über Google war nicht erfolgreich; Während die Problemumgehung das Problem löst, ist es für mich wichtig, dies in der Dokumentation zu finden. Jede Hilfe wird geschätzt. gerryLowry vor 8 Jahren 0
Entfliehen Sie dem `=` mit einem `^`. Zum Beispiel: `echo cde> c ^ = d.txt`. Michael Frank vor 8 Jahren 0
@MichaelFrank ja, das funktioniert auch; Danke dir; Was ich jedoch wirklich wissen möchte, ist, warum sich dieses Verhalten so verhält. `=` ist nicht eines der hier aufgeführten Sonderzeichen "* [Namenskonventionen] (https://msdn.microsoft.com/en-ca/library/windows/desktop/aa365247 (v = vs.85) .aspx # naming_conventions) * "~~` <`(kleiner als); `>` (größer als); `:` (Doppelpunkt); `` (doppeltes Anführungszeichen); `/` (Schrägstrich); `\` (umgekehrter Schrägstrich); `|` (senkrechter Strich oder Pipe); `?` (Fragezeichen); `*` (Sternchen) gerryLowry vor 8 Jahren 0
Siehe meine Antwort unten, aber im Grunde handelt es sich um ein Trennzeichen, das zum Trennen von Befehlen verwendet wird. Michael Frank vor 8 Jahren 0

1 Antwort auf die Frage

0
Michael Frank

Das =Zeichen ist ein Trennzeichen, funktional scheint es einem Leerzeichen zu entsprechen . Wie Sie im folgenden Beispiel sehen können:

c:\NotBackedUp>echo abc>d efg.txt  c:\NotBackedUp>type d abc efg.txt 

Ebenso =wird das gleiche tun:

c:\NotBackedUp>echo abc>d=efg.txt  c:\NotBackedUp>type d abc=efg.txt 

Werfen wir einen Blick auf Ihren ersten Befehl: echo cde > c=d.txt

Zunächst starten Sie den echoBefehl und übergeben ihm einen Wert cde, der in die Datei eingefügt werden soll c. Da =ist ein Trennzeichen, und Sie haben nicht gesagt, echowo die nächste Zeichenfolge zu senden d.txt, wird standardmäßig die vorherige Datei: c.

Sie können dies umgehen, indem Sie entweder den Namen Ihrer Ausgabe angeben:

c:\NotBackedUp>echo abc>"d=e.txt" 

oder indem Sie das Trennzeichen mit ^:

c:\NotBackedUp>echo abc>d^=e.txt 

Beide erstellen eine Datei d=e.txtmit Inhalt abc.

Weitere Informationen zu Trennzeichen

Vielen Dank für den Link zur Simon Sheppard-Site [ss64.com] (ss64.com) ... siehe meine Bearbeitung # 2. Sie haben Recht damit, dass * manchmal * `=` wie ein Trennzeichen wirkt. Für mich ist es überraschend, dass Microsoft dies nicht dokumentiert hat. Ich hätte es vorgezogen, Dokumentation von Microsoft gefunden zu haben. Trotzdem, weil die Website von Simon Sheppard mich zu einem besseren Verständnis verleitete, markiere ich Ihre Antwort als Antwort. gerryLowry vor 8 Jahren 0