Warum interpretiert die Windows-Befehlszeile (cmd.exe) "cd \" als gültigen Befehl?

1

Über die Windows-Standardbefehlszeile (cmd.exe) können Sie mit dem Befehl cd \ zum Stammverzeichnis des aktuellen Laufwerks springen (cd gefolgt von einem Backslash ohne Leerzeichen dazwischen).

Mit PowerShell können wir String-Aliase für Cmdlets definieren, aber der Befehl cd \ funktioniert gut mit der Standard-cmd.exe und ist daher kein PowerShell-Alias.

Ist dies einfach eine integrierte Verknüpfung zur Standardverwendung des Befehls cd, bei der Sie das Zielverzeichnis als Parameter für den Befehl selbst angeben (mit einem Leerzeichen zwischen dem Befehl und dem Parameter, wie erwartet)?

Ladranas
quelle
1
cd \ funktioniert genau wie dir \ oder anycommand \, da die Token vor `\` aufgeteilt werden, da es sich um ein ungültiges Zeichen in Dateinamen handelt
phuclv
Vielen Dank an LưuVĩnhPhúc für die prägnante Antwort, dies hilft sehr.
Ladranas
Ich beschreibe dies in meiner Antwort auf Jonas Köritzs frühere Frage, warum "cd .." ohne Leerzeichen funktioniert . Ich stimme dem Kommentar von LưuVĩnhPhúc nicht vollständig zu, da ein Backslash Teil des relativen Pfads eines Unterverzeichnisses sein kann. Kurz gesagt, dieses Verhalten hat damit zu tun, dass der Befehl "cd" etwas Besonderes ist, da dieser Befehl als "interner" Befehl erkannt wird, der in den Befehlszeileninterpreter / die Befehlszeilen-Shell integriert ist.
TOOGAM

Antworten:

0

Mit PowerShell können wir String-Aliase für Cmdlets definieren, aber der Befehl cd \ funktioniert gut mit der Standard-cmd.exe und ist daher kein PowerShell-Alias.

Nur weil es in CMD ein Standardformular ist, heißt das nicht, dass es in PS kein Alias ​​ist. Tatsächlich ist fast jeder "Standardbefehl" in CMD, der auch in PS funktioniert, ein Alias. CD ist ein Alias ​​für set-location.

Verwenden Sie den Befehl get-alias cd, um diese und andere überraschende Tricks zu lernen!

WARUM CD\ ein gültiger Befehl ist, kann SuperUser nicht beantworten.

AKTUALISIEREN

CMD muss kein PS laden, um etwas zu tun.

Wenn Sie Ihre Kommentare lesen, kommt mir die Idee, dass Sie als Erstes erkennen müssen, dass sich CD \ in CMD lange vor dem Erscheinen von PS so verhalten hat. Vergessen Sie also PS. PS durcheinander zu bringen, bedeutet Verwirrung zu stiften. Hast du PS schon vergessen? ( Die richtige Antwort lautet hier "Ja") Gut.

Wie Lưu Vĩnh Phúc in seinem Kommentar erwähnt, können Befehlszeichenfolgen mit verschiedenen Methoden und aus verschiedenen Gründen maskiert werden. WARUM sie dies tun, ist Sache des einzelnen Befehlsparsers, des Hostsystems, des spezifischen Befehls, der Personen oder Teams oder Organisationen, die all dies entwickelt haben, und möglicherweise auch anderer Gründe.

music2myear
quelle
Ich verstehe, dass Powershell-Aliase für sogenannte "Standardbefehle" vorhanden sind und dass Sie die Aliase in der beschriebenen Weise auflisten können, obwohl ich neugieriger war, wie die Standard-Eingabeaufforderung (cmd.exe) den Befehl "cd" interpretiert und analysiert \ "wenn Sie PowerShell noch nicht geladen haben (dh wenn Sie nicht cmd.exe starten und dann Powershell eingeben, um in eine PS-Eingabeaufforderung zu springen).
Ladranas
Einige Dinge in CMD.EXE sind nur einfache Eigenheiten.
Hannu