up 2016/04/14 コメント欄でやり方を教えてもらいました。ありがとうございます
出来ない。環境はConEmu 160301 [32]+windows 7 64bit
タブの右クリック→duplicate root では、rootが必ずデスクトップになってしまう。
しょうがないから、自分でコマンド定義してそのコマンドでconemu.exe "$pwd" 的な事をしようと思ったら例によって日本語の扱いが微妙。
まず、powerShellのプロファイルスクリプトで以下の関数を定義。関数名はもちろんなんでもいい
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:\")
そんじゃーね