Der Befehl CD gibt das aktuelle Verzeichnis zurück und die Variable %CD% gibt dasselbe Ergebnis in einer Umgebungsvariablen zurück:
c:\Temp\test\test1>cd
c:\Temp\test\test1
c:\Temp\test\test1>@echo %cd%
c:\Temp\test\test1
Dieser Befehl gibt das Ergebnis des CD-Befehls wieder
for /F %f in ('cd') do @echo %f
also sollte ich
c:\Temp\test\test1
aber eigentlich bekomme ich:
c:\Temp\test\test1>for /F %f in ('cd') do @echo %f
c:\work\Consulting
aber die Verwendung von %CD% ergibt Folgendes:
c:\Temp\test\test1>for /F %f in ('@echo %cd%') do @echo %f
c:\Temp\test\test1
Dies hat auf meinem Computer funktioniert, als ich es vor einigen Monaten zum letzten Mal getestet habe (es befindet sich in einem nicht oft verwendeten Skript).
Ich habe es auf einem anderen Rechner getestet und dort funktioniert es einwandfrei. Ich denke also, dass es daran liegt, wie ich die Eingabeaufforderung öffne und das Arbeitsverzeichnis mithilfe c:\work\Consulting
des folgenden Registrierungsskripts einstelle:
Windows-Registrierungseditor, Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="cd /d C:\\Work\\Consulting"
(Zu Ihrer Information: Dies ist erforderlich, wenn Sie eine Eingabeaufforderung mit erhöhten Rechten für ein bestimmtes Verzeichnis öffnen möchten.)
Leider nein!
Bearbeiten: Natürlich kenne ich eine Problemumgehung, aber ich frage mich, was ich getan habe, um dies zu verursachen.
Antwort1
Ja, Ihr Autorun-Registrierungseintrag verursacht das Problem. FOR /F
führt Befehle innerhalb der IN()-Klausel über CMD.EXE aus. Und CMD.EXE führt Autorun aus, sofern die /D
Option nicht verwendet wird. Es gibt jedoch keine Möglichkeit, FOR /F zu zwingen, die Option zu verwenden /D
. :(
Ich möchte meine Befehlsshell auch gerne in einem bestimmten Ordner öffnen, verwende aber nicht Autorun. Stattdessen erstelle ich eine Verknüpfung und bearbeite die Eigenschaften, sodass „Starten in:“ auf den gewünschten Ordner eingestellt ist.
Wenn Sie wirklich wollen, können Sie meiner Meinung nach immer noch Autorun verwenden. Ich glaube, Sie möchten wirklich nur, dass Autorun bei der ersten Instanziierung Ihrer CMD-Sitzung auf CD ausgeführt wird. Sie können Ihren Registrierungseintrag wie folgt ändern, um dies zu erreichen:
[HKEY_CURRENT_USER\Software\Microsoft\Command Processor]
"Autorun"="if not defined AutoRunComplete set AutoRunComplete=TRUE&cd /d C:\\Work\\Consulting"
Wenn Ihre Autorun-Logik komplexer wird, möchten Sie möglicherweise ein Batch-Skript erstellen und Autorun dieses Skript dann aufrufen lassen.
Antwort2
Warum deaktivieren Sie es nicht HKEY_CURRENT_USER\Software\Microsoft\Command Processor\Autorun
vollständig und erstellen stattdessen eine Verknüpfung wie die folgende?