Legen Sie den Titel "Befehlsfenster hier öffnen" als das Verzeichnis fest, aus dem es aufgerufen wurde

774
laggingreflex

Ich kann den Titel als aktuelles Verzeichnis in einer regulären Batchdatei festlegen.

Ich möchte dies für das cmd-Fenster tun, das geöffnet wird, wenn Sie ein "Befehlsfenster hier öffnen" aus einem Windows-Ordner (automatisch) ausführen.

Ich weiß, dass Sie beim Start einer beliebigen Cmd eine Batch-Datei ausführen können. Ich habe Antworten erhalten , um den Verzeichnisnamen abzurufen. Wenn Sie jedoch versuchen, den Verzeichnisnamen abzurufen, erhalten Sie nur den direkten Namen der autorun.cmdDatei, nicht den Verzeichnisnamen, der " Befehlsfenster hier öffnen cd.

Es scheint, als hätte der autorun.cmdAufruf zum Zeitpunkt des Aufrufs noch nicht die Informationen über das Verzeichnis, das sich zu dem ändern wird, von dem aus das "Befehlsfenster hier öffnen" aufgerufen wurde. Ist das der Fall? Oder gibt es noch eine Möglichkeit, den Titel automatisch in das aktuelle Verzeichnis zu ändern?

Legen Sie den Titel

2
Ist es eigentlich wichtig, dass der Titel immer das aktuelle Verzeichnis anzeigt oder reicht es aus, um das Startverzeichnis anzuzeigen? Mario vor 9 Jahren 0
Mögliches Duplikat von [cmd.exe beim Anpassen der Shell-Erweiterung "Eingabeaufforderung hier öffnen"] (http://superuser.com/questions/414155/cmd-exe-customizing-the-open-command-prompt-here-shell-extension ) MBu vor 9 Jahren 0

3 Antworten auf die Frage

2
Mario

Ich würde die folgende Zeile versuchen:

for %a in (.) do title %~na 

Oder in einer Batchdatei würden Sie die %s einmal entgehen lassen :

for %%a in (.) do title %%~na 

Die for...doSchleife ist nur vorhanden, um den aktuellen Pfad in die Variable zu übernehmen, da Sie den ~Operator nicht mit Umgebungsvariablen wie ( %cd%) verwenden können.

Wie Sie bemerkt haben, funktioniert dies jedoch nicht für die "Eingabeaufforderung", da dies ausgeführt wird, bevor das Verzeichnis festgelegt ist.

Um dies zu umgehen, müssen Sie im Wesentlichen die aufgerufene Befehlszeile ändern, wenn Sie diese Funktionalität verwenden.

Dies wird durch zwei Variablen in der Registry gesteuert, die beide Unterschlüssel sind HKEY_CLASSES_ROOT\Directory:

HKEY_CLASSES_ROOT\Directory\shell\cmd\command: Diese Taste definiert den Befehl, der ausgeführt werden soll, wenn Sie mit der Shiftrechten Maustaste auf ein Verzeichnis- / Ordnersymbol klicken.

HKEY_CLASSES_ROOT\Directory\Background\shell\cmd\command: Diese Taste definiert den Befehl, der ausgeführt werden soll, wenn Sie mit der shiftrechten Maustaste irgendwo in ein geöffnetes Explorer-Fenster klicken.

Standardmäßig sind beide Standardwerte auf festgelegt. Dadurch cmd.exe /s /k pushd "%V"wird ein Befehlsfenster geöffnet und das Verzeichnis in den als übergebenen Parameter geändert %V.

Damit dies funktioniert, müssen Sie diese beiden Standardwerte bearbeiten und den Befehl von oben leicht angehängt anhängen. Setzen Sie einfach beide Standardwerte auf Folgendes:

cmd.exe /s /k "pushd ""%V"" && for %%A in (%V) do @title %%~nA" 

Beachten Sie die doppelten Anführungszeichen, um sie richtig zu umgehen, da alles in ein einzelnes Anführungspaar eingeschlossen ist, um alles für den Parameter cmd.exe zu gruppieren /k. Der @Befehl dort wird den Befehl im Befehlsfenster verbergen.

Dies funktioniert für mich, aber es gibt ein paar kleine Macken: Wenn Ihr Verzeichnisname mehr als einen Punkt enthält, wie one.two.three, so wird nur der Titel benannt one.two.

Denken Sie auch daran, dass der Titel nicht aktualisiert wird, wenn Sie von CD in ein anderes Verzeichnis wechseln. Dies in die Tat umzusetzen, wäre ein bisschen schwieriger (oder sogar unmöglich; habe es nicht versucht).

Vielen Dank!!! Zwei Dinge: In meinem Fall war es HKEY_LOCAL_MACHINE \ SOFTWARE \ Classes \ Directory \ background \ shell \ cmd \ command`. Und: Es ignoriert Leerzeichen (es gibt den Titel "Ordner" für "Neuer Ordner") laggingreflex vor 9 Jahren 0
@laggingreflex: Das ist im Wesentlichen derselbe Pfad. "HKCR" ist nur eine Abkürzung. :) Was das Ignorieren von Leerzeichen betrifft: Ja, das ist wahrscheinlich ein Rest aus alten DOS-Zeiten (wie auch die Beschränkung auf einen Punkt). Mario vor 9 Jahren 0
Hmm. Ich habe es versucht und es hat nicht funktioniert. Dann suchte ich in regedit nach "cmd.exe / s / k pushd"% V "" und fand ein paar Einträge, von denen ich einige nicht bearbeiten konnte (einige Fehler). Das war das, das ich endlich editiert habe und es hat funktioniert. Vielleicht ist es nur für meinen Fall. Ich habe einige Einstellungen aktiviert, so dass ich die Umschalttaste nicht halten muss, um das "Befehlsfenster" zu öffnen. laggingreflex vor 9 Jahren 0
Um nicht die Umschalttaste drücken zu müssen, gehen Sie einfach zu den in meiner Antwort beschriebenen Pfaden und entfernen Sie den Wert für "Extended" unter den Tasten "cmd". Zwar ist es in der Tat möglich, einige andere bearbeitete Berechtigungen des Werkzeugs zu verwenden, um weitere Änderungen / Rücksetzungen zu vermeiden. Mario vor 9 Jahren 0
Es ist nicht nur Ihr Fall, spezielle Ordner wie Desktop usw. werden von anderen Schlüsseln in der Registrierung verarbeitet. Und es ist nicht nötig, den `for`-Befehl zu verwenden,` cmd.exe / s / k "pushd" "% V" "und title% V" `reicht aus. Sehen Sie sich diese Frage an: http://superuser.com/questions/414155/cmd-exe-customizing-the-open-command-prompt-here-shell-extension (Früher als ich meine Antwort auf Ihre Frage schrieb, habe ich vergessen, dass die Frage war.) schon anderswo beantwortet) MBu vor 9 Jahren 0
@MBu Das führt dazu, dass sich der gesamte Pfad in der Titelleiste befindet. Ziel war es, nur den tatsächlichen Ordnernamen zu haben (nicht jedoch den Pfad). Mario vor 9 Jahren 0
Du hast recht, sorry :-) MBu vor 9 Jahren 0
@MBu Es ist eng miteinander verbunden, nur ein bisschen erweitert. Auch die speziellen Ordner sind eine gute Notiz, die ich völlig vergessen habe. :) Mario vor 9 Jahren 0
Schreiben Sie diese `for`-Schleife neu, um Leerzeichen und Punkte in einem Ordnerpfad zu ignorieren: @for / F" tokens = * "%% G in ("% CD% ") do @title %% ~ nG %% ~ xG `und ich würde` cd / D` statt `pushd` verwenden, da ich wahrscheinlich kein entsprechendes` popd` brauche JosefZ vor 9 Jahren 0
@JosefZ Interessant. :) Ich habe das "pushd" einfach behalten, weil es der Standardwert ist. Mario vor 9 Jahren 0
In dem von mir angegebenen Code sollte das Prozentzeichen %% verdoppelt werden: `in ("% CD% ")`. Hier sind jedoch gültige Syntaxe für diese Registrierungswerte verfügbar: entweder `cmd.exe / D / K cd / D"% 1 "&& @for / F" tokens = * "%% G in ("% 1 ") do @ title %% ~ nG %% ~ xG` oder `cmd.exe / D / K cd / D"% 1 "&& @for / F" tokens = * "%% G in (" %% CD %% ") @title %% ~ nG %% ~ xG`. Beachten Sie bitte ein doppeltes kaufmännisches Und-Zeichen: Das Umbenennen wird nicht ausgeführt, wenn das Verzeichnis aus irgendeinem Grund fehlschlägt. Der Benutzer wird daher sofort informiert: _something war falsch_ JosefZ vor 9 Jahren 0
@JosefZ Ich habe es ausprobiert und es sieht so aus, als müsste es ** `% V` **,`% 1` oder `% CD%` nicht funktionieren. cmd.exe / D / K cd / D "% V" && für / F "tokens = *" %% G in ("% V") tun @title %% ~ nG %% ~ xG`. Danke, dass Sie die Verzeichnisse mit Leerzeichen funktionieren lassen. laggingreflex vor 9 Jahren 0
Gegen ""% V "" versus "" 1 "`: IMHO, da ich auf _retired_Win-XP bin, ist dies ein instanziiertes Ereignis von Microsofts Herangehensweise an die Abwärtskompatibilität_ :-) JosefZ vor 9 Jahren 0
Ich habe auch festgestellt, dass "cd" anstelle von "pushd" dazu führt, dass "autorun.cmd" (wie in meinem Original erwähnt) nicht funktioniert. "Pushd" scheint die bessere Option zu sein. laggingreflex vor 9 Jahren 0
1
JosefZ

Angeregt durch die Frage, habe ich etwas Spaß Funktionalität der Kommandozeile auf meinem Windows hinzugefügt: Pseudo- Befehle cdn, pushdnund popdn(Hinter N = acronymous neue oder Benennung oder sogar Nonsens oder was auch immer) entsprechend cd, pushdund popdBefehle. Diese Pseudobefehle helfen, meinen cmdFenstertitel cmdwie folgt parallel zum aktuellen Verzeichnispfad zu halten :

current directory window title ------------------ -------------- X:\subpath\subfold X:\ ..\subfold  X:\folder X:\folder X:\ X:\ 

für jeden Antrieb X:und beliebige Tiefe von subpath.

Codebeispiel: In cdn.bateinem expliziten Ordner in der pathUmgebungsvariablen abgelegt .

@rem cdn.bat @rem change directory (and drive) || abort script processing in case of bad success @cd /D %* || @goto :eof @rem eliminate (if any in %*) trailing backslashes, surrouding double-quotes @rem and/or (combined) symbols to current, parent or root directory (., .., \) @call :window_title "%CD%" @rem or, to title window to bare folder name, use:  @rem @for /F "tokens=*" %%G in ("%CD%") do @title %%~nG%%~xG @goto :eof  :window_title @if "%~p1%~n1%~x1" == "\%~n1%~x1" ( @rem window title to 'X:\folder' on highest-level path or to 'X:\' on drive root @title %~d1%~p1%~n1%~x1 ) else ( @rem window title to 'X:\...\folder' otherwise (i.e. nor root, nor highest-level) @title %~d1^\ ..^\%~n1%~x1 ) @exit /B 

Freude, meine Freude zu teilen.

0
mike_n

Dies ist jetzt möglich, um sich nach jedem Befehl automatisch auf dem neuesten Stand zu halten, ohne „cd“ usw. neu zu definieren. Siehe Befehlszeile ändern, um nur den aktuellen Verzeichnisnamen anzuzeigen

Willkommen bei Super User! Wie bei Ihrer anderen Antwort (identisch mit dieser) ist es [bevorzugt] (// meta.stackoverflow.com/q/8259), die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. bertieb vor 5 Jahren 0
Außerdem wurde der verknüpfte Beitrag gelöscht, sodass dieser Link nirgendwo hinweist. fixer1234 vor 5 Jahren 0