回答編集履歴
4
PowerShellでの変数解釈ルール説明を加え、全面改訂
answer
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
-
PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
|
2
|
-
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType()} で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
3
|
-
|
4
1
|
```PowerShell
|
5
|
-
|
2
|
+
-Path $_temp.txt
|
6
|
-
```
|
3
|
+
```
|
4
|
+
では _temp という名前の変数の値を探しに行ってしまいます。
|
5
|
+
PowerShellでは空白文字や.,などの英単語の区切文字までは同一単語と見做すからです。
|
6
|
+
回避方法はhichonさんの回答のように変数名を{}で囲み
|
7
|
+
```PowerShell
|
8
|
+
-Path ${_}_temp.txt
|
9
|
+
```
|
10
|
+
とするか、横着せずに、型変換し文字列結合演算子を用い
|
11
|
+
```PowerShell
|
12
|
+
-Path ([string]$_ + '_item.txt')}
|
13
|
+
```
|
14
|
+
と書くかです。
|
15
|
+
なお変数名の{}囲みは本来は記号やスペースを含むような特殊な変数名を定義するための機能です
|
3
}ヌケを補填
answer
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
|
2
|
-
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType() で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
2
|
+
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType()} で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
3
3
|
|
4
4
|
```PowerShell
|
5
5
|
1..10 | ForEach-Object {New-Item -Path ([string]$_ + '_item.txt')}
|
2
回答を修正
answer
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
PowerShellでは $_ がパイプラインで受け渡される自動変数となります。
|
2
|
+
1..10で渡されるとint型となる( C:\Users\Mentenance> 1..10|%{$_.GetType() で確認可能)ので、文字列として扱わせたいなら型変換する必要があります。
|
3
|
+
|
1
4
|
```PowerShell
|
2
|
-
1..10 | ForEach-Object {New-Item -Path ($_ + '
|
5
|
+
1..10 | ForEach-Object {New-Item -Path ([string]$_ + '_item.txt')}
|
3
6
|
```
|
1
コードスニペットに置き換え
answer
CHANGED
@@ -1,1 +1,3 @@
|
|
1
|
+
```PowerShell
|
1
|
-
1..10 | ForEach-Object {New-Item -Path ($_ + 'item.txt')}
|
2
|
+
1..10 | ForEach-Object {New-Item -Path ($_ + 'item.txt')}
|
3
|
+
```
|