「Windowsでエクスプローラーからフォルダを各種ターミナルで開く」の版間の差分
Notion-MW |
Notion-MW |
||
46行目: | 46行目: | ||
** 以後、「powershell(.exe)」と「pwsh(.exe)」で呼び分ける。ただし手元ではpowershellの5.1とpwshの7.2~7.3くらいでしか試していないので、一部バージョンではまた違う可能性もある。 | ** 以後、「powershell(.exe)」と「pwsh(.exe)」で呼び分ける。ただし手元ではpowershellの5.1とpwshの7.2~7.3くらいでしか試していないので、一部バージョンではまた違う可能性もある。 | ||
** pwshは必ずしもWindowsに標準では入っていないので、以下の例でもあまり依存しないように気を付ける。 | ** pwshは必ずしもWindowsに標準では入っていないので、以下の例でもあまり依存しないように気を付ける。 | ||
** 基本、シングルクォートで囲えばほとんどの特殊文字が無効になり、シングルクォート自体を書くときは2つ並べる。ただし注意点として、驚くべきことにpowershell/pwshでは「<strong>全角のシングルクォート</strong>(U+2018-U+201B、<code>‘</code> <code>’</code> <code>‚</code> <code>‛</code>の4つ)」も通常のシングルクォートと同じ効力があるので、同じようにエスケープする必要がある(参照: [https://learn.microsoft.com/ja-jp/powershell/scripting/lang-spec/chapter-02?view=powershell-7.2 https://learn.microsoft.com/ja-jp/powershell/scripting/lang-spec/chapter-02?view=powershell-7.2])。掲載したスクリプトでは省略しているがやることは同じ。 | |||
* powershell.exe | * powershell.exe | ||
** -Commandがなくても付けたのと同じ扱いになる? | ** -Commandがなくても付けたのと同じ扱いになる? | ||
*** 逆に、-Commandを付けなければいけないという点を除いてはpwshがpowershellの上位互換という感覚である。 | *** 逆に、-Commandを付けなければいけないという点を除いてはpwshがpowershellの上位互換という感覚である。 | ||
** <code>`</code>や<code>[]</code>を含むフォルダの扱いにバグがあり、cmdなどでこれらのフォルダをカレントディレクトリとした状態で5系のPowerShellを起動すると<code>C:\</code>や<code>C:\Windows\System32\WindowsPowerShell\v1.0></code>をカレントディレクトリとして起動される(たとえば<code>C:\somefolder][</code>なら前者、<code>C:\somefolder[]</code>なら後者)。 | ** <code>`</code>や<code>[]</code>を含むフォルダの扱いにバグがあり、cmdなどでこれらのフォルダをカレントディレクトリとした状態で5系のPowerShellを起動すると<code>C:\</code>や<code>C:\Windows\System32\WindowsPowerShell\v1.0></code>をカレントディレクトリとして起動される(たとえば<code>C:\somefolder][</code>なら前者、<code>C:\somefolder[]</code>なら後者)。 | ||
** -Fileを使用してスクリプトを実行するとき、ダブルクォーテーションで囲われていない <code>-</code> が引数に含まれているとエラーになるバグがある。 | |||
* powershell.exe・pwsh.exe共通 | * powershell.exe・pwsh.exe共通 | ||
** 連続した<code>`</code>があるフォルダに関する挙動にバグがある。コンソールプログラムを実行しても新規ウインドウで開かれる、そこをカレントディレクトリとしたときにファイルをmvできないなど。 | ** 連続した<code>`</code>があるフォルダに関する挙動にバグがある。コンソールプログラムを実行しても新規ウインドウで開かれる、そこをカレントディレクトリとしたときにファイルをmvできないなど。 | ||
** <code>`</code>や<code>[]</code>を含むフォルダに関しても、絶対パス指定したりきちんとエスケープしたりすれば操作自体はできる(場合もある)。 | ** <code>`</code>や<code>[]</code>を含むフォルダに関しても、絶対パス指定したりきちんとエスケープしたりすれば操作自体はできる(場合もある)。 | ||
*** エスケープはいずれも直前に<code>`</code>を付ける。 | |||
*** これらを特殊文字として扱いたくないときは<code>-LiteralPath</code>を付けると良い場合もある。 | *** これらを特殊文字として扱いたくないときは<code>-LiteralPath</code>を付けると良い場合もある。 | ||
** UNCパスをカレントディレクトリにすることができるが、<code>Microsoft.PowerShell.Core\FileSystem::\\</code>とかいう謎のプレフィックスが付く。 | ** UNCパスをカレントディレクトリにすることができるが、<code>Microsoft.PowerShell.Core\FileSystem::\\</code>とかいう謎のプレフィックスが付く。 | ||
190行目: | 193行目: | ||
<p>startrunと同じだが、コンパイル時のマニフェスト設定でこのプログラム自体の実行に管理者権限を要求するようにしたので、adminrunと同じように使える(管理者権限で実行する対象が渡されたコマンドではなくuacrun自体になるという違いはある)</p></li> | <p>startrunと同じだが、コンパイル時のマニフェスト設定でこのプログラム自体の実行に管理者権限を要求するようにしたので、adminrunと同じように使える(管理者権限で実行する対象が渡されたコマンドではなくuacrun自体になるという違いはある)</p></li> | ||
<li><p>pecho</p> | <li><p>pecho</p> | ||
<p> | <p>与えられたコマンドライン引数をそのままコンソールに出力する。→WindowsでUnicode文字(特にU+10000以上)を正しく表示(&ファイルに書き込み)するには、「出力先がコンソールならWriteConsoleW、そうでなければWriteFileを使用する」といった非常に面倒な実装が必要であり(参照: [https://twitter.com/mattn_jp/status/542581083242364928 https://twitter.com/mattn_jp/status/542581083242364928] など)、C++やC#では扱いづらい。そこでrustを用いて実装した。→[https://github.com/ge9/pure-echo-win pure-echo-win]</p></li> | ||
<li><p>printcd</p> | <li><p>printcd</p> | ||
<p>カレントディレクトリをコンソールに出力する。(ちなみにpwdの由来はprint working directoryなのでそれに倣った)</p></li></ul> | <p>カレントディレクトリをコンソールに出力する。(ちなみにpwdの由来はprint working directoryなのでそれに倣った)</p></li></ul> | ||
<span id="注意:-当初は後述のnoworkingdirectoryを知らなかったので1の方法に頼っていたが実際には2の方法のほうが簡明なのでそちらを使うことを勧める1は残しておくが読む必要はあまりない"></span> | |||
== 注意: 当初は後述のNoWorkingDirectoryを知らなかったので1.の方法に頼っていたが、実際には2.の方法のほうが簡明なので、そちらを使うことを勧める。1.は残しておくが、読む必要はあまりない。 == | |||
{{UnderConstruction|Windowsでエクスプローラーからフォルダを各種ターミナルで開く}} | |||
<span id="1標準入力から受け取る場合"></span> | <span id="1標準入力から受け取る場合"></span> |