エラーメッセージなどが出ているのであれば、後出しにせず、最初から提示するようにお願いします。
(200106 : Zuishin さんのコメントを元に表現変更)
質問のエラーは、PowerShell の以下の二つの動作が原因となります。
一つ目は、PowerShell のコマンド(コマンドレット・関数・ネイティブコマンドなど)は、スペース
を引数の区切りとして認識することです。
つまりTest-Path $PATH + "¥*.csv"
という記述は、Test-Path
・$PATH
・+
・"¥*.csv"
と分割され
Test-Path
コマンドレットに、
位置指定1個目のパラメータとして$PATH
、
位置指定2個目のパラメータとして+
、
位置指定3個目のパラメータとして"¥*.csv"
、
を指定した、と認識されます。
位置指定のパラメータを3個指定することになりますが、Test-Path
には位置指定パラメータがPath
の1個しか無いため「Test-Path : 引数 '+' を受け入れる位置指定パラメーターが見つかりません。」
のエラーが発生します。
二つ目は、PowerShell のコマンド(コマンドレット・関数・ネイティブコマンドなど)の後ろに入力した文字は、基本的に文字列として扱われることです(詳細は下記about_Parsing
のリンク先参照)。
about_Parsing (日本語)
about_Parsing - PowerShell | Microsoft Docs
そのため、「一つ目」の内容を元に「Test-Path $PATH+"¥*.csv"
」のようにスペース
を抜いて記述しても、エラーこそ出ませんが意図したように動作しません。
Test-Path $PATH+"¥*.csv"
としたときは、+
が演算子ではなく、文字の一部と解釈されているためです。
使用しているエディタや設定によりますが、Windows PowerShell ISE では以下のように+
が紫色で表示され、ただの文字列として認識されているのがわかります。
対策としては、以下のような方法があります。
- ひとまとめにしたい範囲を()で囲む (汎用的)
- 文字列内に変数埋め込みを使う (言語特有・やや注意が必要)
- 一度文字列を別の変数に格納してから実行する(やや手間だが汎用的)
PowerShell
1# 念のため位置指定パラメータでは無く、名前指定パラメータとしている。
2
3# ひとまとめにしたい範囲を()で囲む (他のプログラミング言語でもよく使われる一般的な方法)
4Test-Path -Path ($PATH + "¥*.csv")
5
6# PowerShell では`"`で囲った文字列内に変数を埋め込めるので、以下の記述でも可。
7Test-Path -Path "$PATH¥*.csv"
8
9# 一度文字列を別の変数に格納してから実行する。
10[string]$csvPathPattern = $PATH + "¥*.csv"
11Test-Path -Path $csvPathPattern