回答編集履歴

4

PowerShellでの変数解釈ルール説明を加え、全面改訂

2018/12/30 10:51

投稿

Turkis_Mond
Turkis_Mond

スコア94

test CHANGED
@@ -1,11 +1,29 @@
1
- PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
1
+ ```PowerShell
2
2
 
3
- 1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType()} で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
3
+ -Path $_temp.txt
4
4
 
5
+ ```
5
6
 
7
+ では _temp という名前の変数の値を探しに行ってしまいます。
8
+
9
+ PowerShellでは空白文字や.,などの英単語の区切文字までは同一単語と見做すからです。
10
+
11
+ 回避方法はhichonさんの回答のように変数名を{}で囲み
6
12
 
7
13
  ```PowerShell
8
14
 
9
- 1..10 | ForEach-Object {New-Item -Path ([string]$_ + '_item.txt')}
15
+ -Path ${_}_temp.txt
10
16
 
11
17
  ```
18
+
19
+ とするか、横着せずに、型変換し文字列結合演算子を用い
20
+
21
+ ```PowerShell
22
+
23
+ -Path ([string]$_ + '_item.txt')}
24
+
25
+ ```
26
+
27
+ と書くかです。
28
+
29
+ なお変数名の{}囲みは本来は記号やスペースを含むような特殊な変数名を定義するための機能です

3

}ヌケを補填

2018/12/30 10:51

投稿

Turkis_Mond
Turkis_Mond

スコア94

test CHANGED
@@ -1,6 +1,6 @@
1
1
  PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
2
2
 
3
- 1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType() で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
3
+ 1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType()} で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
4
4
 
5
5
 
6
6
 

2

回答を修正

2018/12/30 06:43

投稿

Turkis_Mond
Turkis_Mond

スコア94

test CHANGED
@@ -1,5 +1,11 @@
1
+ PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
2
+
3
+ 1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType() で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
4
+
5
+
6
+
1
7
  ```PowerShell
2
8
 
3
- 1..10 | ForEach-Object {New-Item -Path ($_ + 'item.txt')}
9
+ 1..10 | ForEach-Object {New-Item -Path ([string]$_ + '_item.txt')}
4
10
 
5
11
  ```

1

コードスニペットに置き換え

2018/12/30 06:42

投稿

Turkis_Mond
Turkis_Mond

スコア94

test CHANGED
@@ -1 +1,5 @@
1
+ ```PowerShell
2
+
1
3
  1..10 | ForEach-Object {New-Item -Path ($_ + 'item.txt')}
4
+
5
+ ```