Was ist zum Beispiel die Alternative zu diesem Befehl ohne Anführungszeichen:
CD "c:\Documents and Settings"
Der volle Grund, warum ich keine Anführungszeichen verwenden möchte, ist, dass dieser Befehl funktioniert:
SVN add mypathname\*.*
aber dieser Befehl funktioniert NICHT:
SVN add "mypathname\*.*"
Das Problem ist, wenn ich meinen Pfadnamen für einen Pfad mit Leerzeichen ändere, muss ich das Ganze zitieren. Zum Beispiel:
SVN add "c:\Documents and Settings\username\svn\*.*"
Aber wenn ich das versuche, bekomme ich folgende Fehlermeldung:
svn: warning: 'c:\Documents and Settings\username\svn\*.*' not found
Antworten:
Es funktioniert fast alles für mich, aber haben Sie vielleicht versucht, line5 .. mit einem Caret-Symbol aus dem Leerzeichen zu entkommen (^)
Oder zB unten, wo das Caret wirklich den Unterschied macht.
Sieht von unten so aus, als wäre das Caret-Symbol Ihre Antwort, siehe Zeile 3 unten.
quelle
Ich fand, dass es funktioniert, nur einen Teil des Ortes mit Anführungszeichen zu versehen. In deinem Fall:
Obwohl hierbei Anführungszeichen verwendet werden, ist es wichtig zu beachten, dass sich die Sternchen außerhalb der Anführungszeichen befinden, sodass sie weiterhin ordnungsgemäß funktionieren.
quelle
Trotz der Antworten, die den Eindruck erwecken, dass es funktioniert, können Sie sich nicht in Leerzeichen in die üblichen cmd-Argumente einschleichen. Das ist leicht zu beweisen:
Speichern Sie "
echo %1
" alstest.bat
. Diese Batch-Datei gibt das erste Argument aus, das uns cmd übergibt.Versuchen Sie nun auszuführen
test.bat
und setzen Sie den Wert%1
auffoo bar
. (Beachten Sie, dass zwischenfoo
und ein Leerzeichen stehtbar
.)Probieren Sie es ein paar Jahre lang aus und stellen Sie fest, dass es keine Möglichkeit gibt, dies zu tun . Die Leute schlagen vor, mit zu fliehen
^
,test.bat foo^ bar
werden aber nicht ausgegebenfoo bar
.Es gibt also keine Möglichkeit, die Ausgabe zu erhalten
foo bar
, und die nächstmögliche Möglichkeit besteht darin, auszuführen ,test.bat foo" "bar
was produziertfoo" "bar
, oder auszuführen,test.bat "foo bar"
was produziert"foo bar"
.Nun, der Grund , warum die anderen Antworten scheinen zu arbeiten, da
cd
tut es selbst ist zusätzlich Parsing, aus dem Verhalten des üblichen Arguments divergierend verläuft (die übliche%1
,%2
,%3
und usw. in typischen Batch - Dateien).Betrachten Sie zum Beispiel den eigentümlichen Befehl:
Warum funktioniert es? Dies ist auf
cd
sich selbst etwas zu tun Äquivalent der 7 Beitritt üblichen Argumente in eine logische Eins. Gemäß den cmd-Argumenten, die den Normen entsprechen, sehen wir 7 Argumente:c:\documents
and
settings
\some
folder
with
spaces
Es ist, als ob
cd
alle 7 Argumente zu einem logischen Argument zusammengefasst worden wären und etwas Ähnliches getan hättenarray.join(" ")
, was den folgenden Pfad ergibt:Beachten Sie, dass dieses Verhalten nur (und einigen anderen Funktionen) eigen
cd
ist . Es hat nichts mit der üblichen Argumentation zu tun.In der Tat
cd
hat eine andere Besonderheit. Denken Sie daran, dass wir oben angegeben haben, dass wir die Ausgabe nicht erhalten konntenfoo bar
? Die nächste Ausgabe, die wir erhalten können, ist durch Ausführen von:welche produziert
foo" "bar
, oder:welche produziert
"foo bar"
, oder:welche produziert
"foo "bar
, oder:welche produziert
foo" bar"
, oder:welche produziert
"foo b"ar
, oder:welche produziert
fo"o bar"
, oder:welche produziert
fo"o ba"r
, oder:welche produziert
"fo"o" bar"
, oder:welche produziert
"f""o""o"" ""b""a""r"
, oder sogar:was produziert
""""f"""o""""o"" ""ba"""r""""""""""
.Alle obigen Beispiele haben eine Ähnlichkeit, nämlich, dass sie erzeugt werden,
foo bar
nachdem wir die"
Zeichen abgeschnitten haben .cd
Dies muss auch der Autor erkannt haben ... wenn wir aus seinemcd
eigentümlichen Verhalten schließen würden, das alles"
, was es empfängt , abschneidet und all diese Befehle funktionieren lässt:cd c:\documents and settings
cd "c:\documents and settings"
cd "c:"\"documents and settings"
cd c:\"documents" "and" "settings"
cd c:\"docu"ments an"d set"tings"
cd c:"\"docu"ments an"d set"ti"""ngs
cd "c"":""\"docu"ments an"d set"ti"""ngs
cd "c"":""\"do""cu"me"nts a"n""d set"ti"""ngs
cd c"""":""""\"""d"""oc""""u"me"""""nt"s a"n""d set"""""""ti""""ngs
quelle
argv[]
oderGetCommandLine()
? pastebin.com/raw/t55iv0JSDer kurze Dateiname scheint wie ein Kinderspiel zu funktionieren.
"E: \ Progra ~ 1 \ Java \ Eclipse \ eclipse.exe" -vmargs -Xms1024m -Xmx2048m
Zur Steigerung des Gedächtnisses ..;)
quelle
Verwenden Sie den Kurznamen 8.3. Zum Beispiel:
quelle
Wenn Sie über den Ersatz von 8.3 sprechen, beachten Sie bitte die folgenden zwei Punkte:
c:\docume~1
Kann also auf Folgendes hinweisen:Es ist nicht sicher, es sei denn, Sie erhalten den Kurznamen und verwenden ihn für atomare Operationen.
Obwohl es sehr ungewöhnlich ist, dass sie sich ändern, ist es üblich, dass sie nicht existieren.
Wenn Sie wissen möchten, ob 8.3 für einen bestimmten Ordner / eine bestimmte Datei vorhanden ist, testen Sie es mit einem Parameter
/X
in einemdir
Befehl oder kapseln Sie es in ein,for
um nur diesen Teil abzurufen.Weitere Informationen zum Aktivieren / Deaktivieren von 8.3 unter NTFS finden Sie in diesem Microsoft-Support-Artikel:
https://support.microsoft.com/en-us/help/121007/how-to-disable-8-3-file-name- Erstellung auf NTFS-Partitionen
quelle
Im Anschluss an @ Pangs Post und an andere, die sich mit Kurznamen und den Fallstricken befassen, können Sie auf folgende Weise einen Langnamen dynamisch in einen Kurznamen auflösen:
Dann können Sie natürlich den Kurznamen anstelle von umgebenden Anführungszeichen verwenden.
quelle