LoginSignup
8
7

More than 5 years have passed since last update.

PowerShellでcdしたら自動でlsしてショートカット先へもcdしたい

Last updated at Posted at 2016-06-24

素人の備忘録。

動機

PowerShellのcdSet-Location)をもうちょっと使いやすくしたい。

  1. cdの後に自動でlsしてもらいたい
  2. ショートカット(.lnkファイル)にも対応してもらいたい
    • ディレクトリのショートカットならそのフォルダへ移動
    • ファイルのショートカットなら元ファイルがあるディレクトリへ移動

解決策

cdの後に自動でls

以下の関数を使うとcdの後に自動でlsしてくれる。
参考:code: Coreutils-style ‘ls’ for Windows Powershell

# cdの後に自動でls
function cd-ls {
    param($path)
    try {
        set-location $path -erroraction 'stop'
        ls
    }
    catch {"$_"}
}

ショートカット(.lnkファイル)にも対応

まずショートカットの情報を得るフィルターを作る。
参考:PowerShellで、ショートカット情報を得るフィルタを作ってみる

# ショートカットの情報を得る
filter Get-ShortcutProperty() {
    $sh  = new-object -comobject WScript.Shell
    return $sh.CreateShortcut($_)
}

次に、引数が

  • .lnkファイルでないならそのままcd-ls
  • .lnkファイルなら、
    • WorkingDirectoryがない(=ディレクトリの)ショートカットならTargetPathへcd-ls
    • WorkingDirectoryがある(=ファイルの)ショートカットならWorkingDirectoryへcd-ls

する関数を作る。
参考:How can I follow a windows shortcut in power shell?

# ショートカット先へも移動する
function Move-Location {
    param($path)
    If (((Resolve-Path $path).Path).EndsWith(".lnk")) {
        $ShortcutPath = Get-ChildItem $path | Get-ShortcutProperty
        If ($ShortcutPath.WorkingDirectory) {
            cd-ls $ShortcutPath.WorkingDirectory
        } else {
            cd-ls $ShortcutPath.TargetPath
        }
    } else {
        cd-ls $path
    }
}

あとは適当にエイリアスする。

Remove-Item alias:cd
Set-Alias cd Move-Location
8
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
7