Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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:\")

そんじゃーね

Fushihara
javascript,nodejs,C#,powerShell,JAVA,php,js,html
https://twitter.com/Fushihara
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away