LoginSignup
1
1

More than 5 years have passed since last update.

conemuでpowershellを使っている時に、duplicate rootをする方法

Last updated at Posted at 2016-03-27

up 2016/04/14 コメント欄でやり方を教えてもらいました。ありがとうございます


出来ない。環境はConEmu 160301 [32]+windows 7 64bit
タブの右クリック→duplicate root では、rootが必ずデスクトップになってしまう。
しょうがないから、自分でコマンド定義してそのコマンドでconemu.exe "$pwd" 的な事をしようと思ったら例によって日本語の扱いが微妙。

まず、powerShellのプロファイルスクリプトで以下の関数を定義。関数名はもちろんなんでもいい

Microsoft.PowerShell_profile.ps1
function fclone{
    ConEmu.exe /Single -cmd "powershell.exe -new_console:a -NoLogo -NoExit " cd "${pwd}"
}

そしてカレントディレクトリを移動。日本語+unicode+スペースのフルセット
C:\Users\Temp\tmp_20160328Mon023752\❤\日 本 語\
そしてConEmu.exe /Single -cmd "powershell.exe -new_console:a -NoLogo -NoExit " cd "${pwd}"を叩くと以下のエラーが出る。promptは書き換えてあるけどカレントディレクトリを表示するようにしてある。

Set-Location : 引数 '本' を受け入れる位置指定パラメーターが見つかりません。
発生場所 行:1 文字:2
+  cd C:\Users\Temp\tmp_20160328Mon023752\❤\日 本 語
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Set-Location]、ParameterBindingException
    + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

2016/03/28 02:41:57 \❤\日 本 語 >

エラーが出てはいるけどカレントディレクトリの移動は成功してるけどエラーが出てる。

ConEmu.exe /Single -cmd "powershell.exe -new_console:a -NoLogo -NoExit " cd "${pwd}"を色々書き換えてみたけどどうにも分からなかった。
ConEmu.exe /Single -cmd ""powershell.exe -new_console:a -NoLogo -NoExit " cd "${pwd}""とか、powershellはバッククオートがエスケープだからそれを入れてみたりとか。markdownだとバッククオートが書けない。

エラーが出るけどとりあえず使えるからまあよしとするか。
これでcmd.exeはお役御免。これからpowerShellをメインに使っていきたい

その他、conemuでpowerShellを使う時のメモ

ConEmu.exe /Single -cmd "powershell.exe -new_console:a -NoLogo -NoExit " cd "${pwd}"
このコマンドだけど、せっかくconemuを使うんだからpowershell.exeじゃなくてタスク名で指定したいけど、それも出来なかった。conemuはコマンドラインやらなんやらが多機能すぎて理解出来ないのがつらい。日本語の情報も少ないし。

conemuのduplicate rootコマンド、ルートディレクトリがデスクトップになって意味が無いのは前述の通りだけど、環境変数が引き継がれているバグ?もある。cmd.exeではそういうの無いはず。
プロファイルスクリプトに

if($env:fLoop){
    $env:fLoop=$env:fLoop+"x";
}else{
    $env:fLoop="x";
}

と書いて、duplicate rootすると変数が"xxx"と増えていく。
だから、プロファイルスクリプトで環境変数を追加してduplicate rootをしていると、環境変数に同じディレクトリがいくつも登録されてしまう。

とりあえず俺はこんな感じで回避。というかduplicate rootはもう使わないから不要になったんだけどね。

function addEnvPath($path){
    $v=($env:Path).Split(";")
    $has = $false
    foreach ($i in $v) {
        if( $i -eq $path ){
            $has=$true
            break
        }
    }
    if($has){
        return
    }
    $Env:Path+=";${path}"
}
addEnvPath("C:\")

そんじゃーね

1
1
2

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
1
1