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

回答編集履歴

4

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

2018/12/30 10:51

投稿

Turkis_Mond
Turkis_Mond

スコア94

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

}ヌケを補填

2018/12/30 10:51

投稿

Turkis_Mond
Turkis_Mond

スコア94

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

回答を修正

2018/12/30 06:43

投稿

Turkis_Mond
Turkis_Mond

スコア94

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 ($_ + 'item.txt')}
5
+ 1..10 | ForEach-Object {New-Item -Path ([string]$_ + '_item.txt')}
3
6
  ```

1

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

2018/12/30 06:42

投稿

Turkis_Mond
Turkis_Mond

スコア94

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
+ ```