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

回答編集履歴

2

Zuishin さんのコメントを元に表現変更

2020/01/06 10:55

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -2,8 +2,13 @@
2
2
 
3
3
  ---
4
4
 
5
+ (200106 : Zuishin さんのコメントを元に表現変更)
5
- PowerShell コマンド(コマンドレット・関数・ネイティブコマンドなど)は、スペース` `を引数区切りして認識します。
6
+ 質問エラーは、PowerShell以下の二つの動作が原因なります。
6
7
 
8
+ ---
9
+
10
+ 一つ目は、PowerShell のコマンド(コマンドレット・関数・ネイティブコマンドなど)は、スペース` `を引数の区切りとして認識することです。
11
+
7
12
  つまり`Test-Path $PATH + "¥*.csv"`という記述は、`Test-Path`・`$PATH`・`+`・`"¥*.csv"`と分割され
8
13
  `Test-Path`コマンドレットに、
9
14
  位置指定1個目のパラメータとして`$PATH`、
@@ -11,10 +16,26 @@
11
16
  位置指定3個目のパラメータとして`"¥*.csv"`、
12
17
  を指定した、と認識されます。
13
18
 
19
+ 位置指定のパラメータを3個指定することになりますが、[`Test-Path`](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/test-path?view=powershell-6)には位置指定パラメータが`Path`の1個しか無いため`「Test-Path : 引数 '+' を受け入れる位置指定パラメーターが見つかりません。」`のエラーが発生します。
20
+
21
+ ---
22
+
23
+ 二つ目は、PowerShell のコマンド(コマンドレット・関数・ネイティブコマンドなど)の後ろに入力した文字は、基本的に文字列として扱われることです(詳細は下記`about_Parsing`のリンク先参照)。
24
+
25
+ > [about_Parsing (日本語)](https://forsenergy.com/ja-jp/windowspowershellhelp/html/8c0cf6ee-9628-435f-824d-b36147574e19.htm)
26
+ > [about_Parsing - PowerShell | Microsoft Docs](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parsing?view=powershell-6)
27
+
28
+ そのため、「一つ目」の内容を元に「`Test-Path $PATH+"¥*.csv"`」のようにスペース` `を抜いて記述しても、エラーこそ出ませんが意図したように動作しません。
29
+
30
+ `Test-Path $PATH+"¥*.csv"`としたときは、`+`が演算子ではなく、文字の一部と解釈されているためです。
31
+
14
32
  使用しているエディタや設定によりますが、Windows PowerShell ISE では以下のように`+`が紫色で表示され、ただの文字列として認識されているのがわかります。
15
33
 
16
- ![NGCode_PowerShellISE](54f1ed589e18d86117ee8bc470a7d208.png)
34
+ ![イメージ説明](497b1ae6d8404807a12429a00c4981bb.png)
17
35
 
36
+ ---
37
+
38
+
18
39
  対策としては、以下のような方法があります。
19
40
 
20
41
  1. ひとまとめにしたい範囲を()で囲む (汎用的)

1

誤記修正

2020/01/06 10:55

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -18,7 +18,7 @@
18
18
  対策としては、以下のような方法があります。
19
19
 
20
20
  1. ひとまとめにしたい範囲を()で囲む (汎用的)
21
- 2. PowerShell 文字列内に変数埋め込みを使う (言語特有・やや注意が必要)
21
+ 2. 文字列内に変数埋め込みを使う (言語特有・やや注意が必要)
22
22
  3. 一度文字列を別の変数に格納してから実行する(やや手間だが汎用的)
23
23
 
24
24