[解決済み] PowerShellでパスを正規化する方法は?
質問
2つのパスがあります。
fred\frog
と
..\frag
こんな感じでPowerShellで結合できるんです。
join-path 'fred\frog' '..\frag'
その結果、こうなります。
fred\frog\..\frag
しかし、私はそれを望んでいません。私はこのように、二重のドットのない正規化されたパスが欲しいのです。
fred\frag
どうすればいいんだ?
どのように解決するのですか?
を組み合わせて使用することができます。
$pwd
,
Join-Path
と
[System.IO.Path]::GetFullPath
で、完全修飾された展開されたパスを取得します。
から
cd
(
Set-Location
) はプロセスの現在の作業ディレクトリを変更しません。PowerShell コンテキストを理解しない .NET API に相対ファイル名を渡すだけで、(現在の場所ではなく)最初の作業ディレクトリに基づくパスに解決するなど、意図しない副作用が発生する可能性があります。
あなたがすることは、まずあなたの道を修飾することです。
Join-Path (Join-Path $pwd fred\frog) '..\frag'
これは(私の現在地からすると)収穫です。
C:\WINDOWS\system32\fred\frog\..\frag
絶対ベースがあれば、.NET APIを安全に呼び出すことができます。
GetFullPath
:
[System.IO.Path]::GetFullPath((Join-Path (Join-Path $pwd fred\frog) '..\frag'))
これは完全修飾パスを与えるもので、その中に
..
が正しく解決された完全なパスが得られます。
C:\WINDOWS\system32\fred\frag
個人的には、外部スクリプトに依存するような解決策は嫌いです。
Join-Path
と
$pwd
(
GetFullPath
はきれいにするためだけです)。もしあなたが
のみを残したい場合は、相対的な部分である
を残したいだけなら、単に
.Substring($pwd.Path.Trim('\').Length + 1)
を追加するだけで、出来上がりです。
fred\frag
最新情報
を指摘してくれた @Dangph に感謝します。
C:\
のエッジケースを指摘してくれたことに感謝します。
関連
-
[解決済み] PowerShellです。エラー "引数 ... を受け入れる位置パラメーターが見つかりません"
-
[解決済み] Connect-VIServer は、渡された資格情報では動作しないが、統合された認証では動作する。
-
[解決済み] Join-Pathを使って、2つ以上の文字列をファイルパスに結合するにはどうすればよいですか?
-
[解決済み] インストールされたPowerShellのバージョンを確認する
-
[解決済み] PowerShellで「このシステムではスクリプトの実行が無効になっています」と言われる。
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] Windows PowerShellの環境変数を設定する
-
[解決済み] 現在のPowerShellスクリプトの場所を特定する最良の方法は何ですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】PowerShellスクリプトを実行する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PowerShellです。エラー "引数 ... を受け入れる位置パラメーターが見つかりません"
-
[解決済み] リモートサーバーへのEnter-PSSessionが "access is denied "で失敗する。
-
[解決済み] [System.Web.Security.Membership]::GeneratePassword() - Type Not found
-
[解決済み] Resolve-Pathコマンドレットは、具体的にどのような処理を行うのですか?
-
[解決済み] Powershell send-mailmessage - 複数の受信者にメールを送信する
-
[解決済み] PowerShellを使用してSFTPにファイルをアップロードする
-
[解決済み] Powershell Get-ChildItem -Filter は、同じ値でWhere句とは異なる動作をします。
-
[解決済み] PowerShell:PowerShellで配列オブジェクトを文字列に変換するにはどうすればよいですか?
-
[解決済み] PowerShellで変数とその型がBooleanであることを宣言する方法は?[重複している]をクリックします。
-
[解決済み] Windows Server 2016で、すべてのPowerShellセッションのコマンド履歴を確認するにはどうすればよいですか?