teratail header banner
teratail header banner
質問するログイン新規登録
PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

498閲覧

PowerShell 特殊文字の展開方法について

AkiraSonoda

総合スコア31

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2025/06/25 03:00

0

0

実現したいこと

Get-ChildItemを用いてフォルダとファイルの情報を取得したいのですが、パスに特殊文字があることで実行エラーが発生してしまいます。エスケープ方法があるかと思いますが調べても分からず投稿しました。ご存知の方は教えていただけると幸いです。

前提

システム
Poweshell 7.4

フォルダの名前は仕様で変更できません。

発生している問題・エラーメッセージ

Cannot find path ‘C:¥Users¥TEST¥Desktop¥10)テスト実行¥’ because it dose not exist.

該当のソースコード

PowersShell

1$path = ‘C:¥Users¥TEST¥Desktop¥10) `テスト実行¥aaa’ 2Get-ChildItem $path -Recurse

試したこと

Get-ChildItemを変数に格納せずに実行すると正常な結果が出力されました。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakaiY

2025/06/25 04:40

確認ですが、ディレクトリの文字列の中にバッククオート「`」が含まれているということであっていますか?
AkiraSonoda

2025/06/25 07:24

いいえ、含まれていません。 括弧はバッククォートでエスケープするのかと思い付けていました。
YAmaGNZ

2025/06/25 07:39

>Get-ChildItemを変数に格納せずに実行すると正常な結果が出力されました。 Get-ChildItem ‘C:¥Users¥TEST¥Desktop¥10) `テスト実行¥aaa’ -Recurse こうしたらエラーにならなかったと言っていますか?
TakaiY

2025/06/25 07:49

> 括弧はバッククォートでエスケープするのかと思い付けていました。 質問を見ると、バッククオートは「テ」の前にだけ付いているように見えますが、それが括弧につけたつもりのバッククオートですか? 実際のパスは「C:¥Users¥TEST¥Desktop¥10)テスト実行¥aaa」ですか? バッククオートを入れない場合どのような結果になりますか?
AkiraSonoda

2025/06/25 08:25

@YAmaGNZ はい、その通りです。 @TakaiY はい、その通りです。 入れない場合の結果は、「Unexpected token ’)’ in expression or statement.」と表示されます。
YAmaGNZ

2025/06/25 09:09

スクリプトファイルを作成して実行しているのであればUTF-8になってたりしませんか?
otn

2025/06/25 14:08

スクリプトファイルをShift_JISで保存している物と思います。 PowerShell 7.4との事なので、UTF8で保存しましょう。 手元の環境では7.5.1ですが、Shift_JISだと同様のエラーメッセージが出ます。 Unexpected token ’)’ の直接の原因は、シングルクォートが全角だから引用符と見做されず、括弧が文字列の外にあるので、構文エラーです。 半角シングルクォートに直して、Shift_JISで保存すると because it does not exist となりますが、これはエンコーディングの違いでファイル名が一致しないからでしょう。
AkiraSonoda

2025/06/26 02:47

@YAmaGNZ BOM無し、UTF-8です。 @otn BOM無し、UTF-8です。 シングルクォートは半角でした。
otn

2025/06/26 03:32 編集

> BOM無し、UTF-8です。 その状態で、Unexpected token ’)’ in expression or statement のエラーになったということですか? > シングルクォートは半角でした。 質問文のコードでは全角です。コピペしないで、全部手打ちで投稿したということですか? それだと、実際に実行しているコードが不明なので、再現テストが不可能です。 実際に実行したコードをコピペしましょう。
guest

回答1

0

ベストアンサー

Windows 11標準のPowerShellで確認しました。
7.4と違うかもしれませんが、参考にしてください。

  • *.ps1ファイルをBOM付UTF-8で保存します
  • 円記号を全部0xA5から0x5Cに変更します
  • パスをU+2018とU+2019で括っていますが、半角のシングルクォート(0x27)かダブルクォート(0x22)に変更します
  • Get-ChildItemコマンドに-LiteralPathを追加します。省略した場合の-Pathだと、パスの解釈で)を別の意味がある記号と解釈されます
$path = 'C:\Users\TEST\Desktop\10) テスト実行\aaa' Get-ChildItem -LiteralPath $path -Recurse

投稿2025/06/25 14:39

hiroki-o

総合スコア1440

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AkiraSonoda

2025/06/26 02:55

@hiroki-o BOM付きUTF-8で保存しました。 円記号とパスの件はよく分かりませんでした。Window10の環境ですが、キーボードの入力で変更できるものですか? -LiteralPathを追加して実行しましたが、エラーが発生しました。 Cannot find pathから始まるエラーです。 余談ですが、ここでの質問や回答はiPhoneから入力をしています。(パソコンからアクセスできない関係のため) よろしくお願いします。
otn

2025/06/26 03:23

-Pathと-Literalpathの違いはワイルドカード [ ] * ? だけで、括弧 ( ) は特別な意味を持たないのではないでしょうか。 pwsh.exe 7.5.1ではそのような動作ですね。標準のpowershell.exeでもやってみましたが少なくとも括弧については同様に見えます。 つまりこの場合は -path でOK。 「ワイルドカードを意図的に使う以外は -literalpath を使いましょう」という考え方もあるでしょうが。
AkiraSonoda

2025/06/26 06:32

@otn -pathに変更して入力しましたが上記と同じエラーでした。 ``` $path = ‘C:¥Users¥TEST¥Desktop¥10) `テスト実行¥aaa’ Get-ChildItem -Path $path -Recurse ```
hiroki-o

2025/06/26 15:16

AkiraSonodaさん テの前の「`」は実際のフォルダー名に付いているのですか? iPhoneで打ち直したのなら、文字コードの指摘は意味が無かったですね。 たった2行なので、正しいパスを正しい文字コードで指定すると確実に動きます。
otn

2025/06/27 06:56

> -pathに変更して入力しましたが上記と同じエラーでした。 いや、私がコメントした内容は、「この場合は(ワイルドカード文字が無いので) -literalpath でも -path でも同じ」ですよ。 -literalpath でうまくいかないプログラムを -path に変えても同じくうまくいきません。 -literalpath でうまくいくプログラムは -path に変えても同じくうまくいきます(ワイルドカード文字が無い場合限定)。 hiroaki-oさんのお書きの通り、 > 正しいパスを正しい文字コードで指定すると確実に動きます。 です。コピペしましょう。
AkiraSonoda

2025/07/01 07:21

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問