Windows: Führen Sie das Skript auf CD aus

1

Unter Linux werden beim Wechsel in ein Verzeichnis eine Reihe von Skripten ausgeführt. Aufgaben wie das Aktualisieren von Repos, das Drehen von Protokollen usw. werden über ein kleines Bash-Skript entschieden, das die "cd" von Bash überschreibt und einige meiner Skripte ausführt, je nachdem, in welches Verzeichnis ich wechsle.

Bei meinem Ubuntu sieht es ungefähr so ​​aus:

function cd() { 
  builtin cd "$@" && /home/cfv/scripts/changedir-hooks
}

Alle meine Bemühungen, die vorhandene "CD" unter Windows zu überlappen, waren erfolglos, und bei SO wurde mir geraten, hierher zu kommen und zu fragen, ob ich vielleicht irgendwo etwas vermisse.

Zur Verdeutlichung verstehe ich, dass ich meine eigene cd.cmd mit ein paar Dingen darin haben kann, aber ich konnte sie nicht nach Windows ausführen cd, und ich möchte zuerst das Verzeichnis wechseln und thenauf diese Tatsache reagieren .

Kann Windows das?

Carlos Vergara
quelle

Antworten:

0

In der Suchsequenz für BASH-Shell-Befehle hat eine Shell-FUNKTION Vorrang vor einem BUILTIN-Befehl . Meines Wissens nach ist in der Windows-Shell kein solches Konzept implementiert (obwohl ein doskeyMakro ihm ähnelt): Ein interner Befehl hat Vorrang vor einem gleichnamigen Befehl (siehe Befehlssuchfolge ). So cd [parameters]zeigt den Namen oder wechselt das aktuelle Verzeichnis immer (siehe cd /?).

Sie können entweder ein Skript verwenden cd.cmd [parameters]oder es umbenennen cmd(siehe nächstes Beispiel). Dieses cdnSkript führt einen internen Befehl aus cdund ändert dann den aktuellen CLI-Fenstertitel in einen aktuellen Verzeichnispfad:

@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
JosefZ
quelle