[PowerShell]大量のファイルを作成するスクリプト

こんにちは！れーあです。
今回はほっっっとんど触ったことのない
PowerShellの勉強をしたくなったのでこの記事を投稿します。

ここでは大量のファイルを作成するスクリプトを作っていきます。

※ほぼ素人の書く記事のため粗さはご了承ください。

## 前提情報
<b>スクリプト実行環境</b>
```
PS C:\Users\user> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      19041  4046
```

## スクリプト内容
というわけで、まずは実際のスクリプトの内容を記載します。

<b>処理内容：指定フォルダ配下にフォルダを大量(20個)作成する。
　　　　　作成するファイル中身にはそれぞれxの値を記載する。</b>
```CreateFiles.ps1
# フォルダパス指定：なければ作成
$folderPath = Read-Host "Please enter Folder Name"

if (-not (Test-Path -Path $folderPath)) {
	New-Item -Path $folderPath -ItemType Directory 
	Write-Host "$folderPath create Successed."
}

# xの初期値を設定
$x = 1

# xの値が20以上になるまで処理繰り返し
while ($x -le 20) {
	#ファイルパス生成
	$filePath = Join-Path -Path $folderPath -ChildPath "test_$x.txt"

	#xの値をファイルに書き込み
	New-Item -Path $folderPath -Name "test_$x.txt" -ItemType file -Value "$x"

	$x += 1
}

Write-Host "Scripts Finished"
```
## 使用コマンドレット説明
|コマンドレット名|説明|備考|
|:-----------|:---------------------|:---------|
|Read-Host "タイトル"|コンソールに入力文字列を読み取る||
|if (-not 条件) {処理}|条件に一致しない場合処理を実施する||
|Test-Path -Path|パスの要素があっているか確認する||
|New-Item -Path "フォルダパス" -ItemType Directory|フォルダ作成|-ItemType Fileでファイル作成|
|while (条件) {処理}|条件に一致するまで処理を繰り返す||
|Join-Path -Path "親パス" -ChildPath "子パス"|親パスと子パスを結合して使用する|実際にそのパスが存在するかは考慮外|
|Write-Host "出力内容"|出力内容記載値をコンソールに表示||

## 実際に動かしてみた
実際に動かしてみました。
ファイル作成先は「C:\Users\user\Desktop\tests」とします。

まず、実行前ではこのフォルダは存在しません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/173d9e25-5f68-9423-5d13-b6405e4c43e4.png)
<br>
実行すると作成フォルダを聞かれます。今回指定フォルダの「C:\Users\user\Desktop\tests」を入力してEnterキーを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/25972502-939b-9b8c-ee9e-ccd3079680ce.png)
<br>
一瞬ファイルが作成された画面表示後、PowerShell画面が終了します。
デスクトップに「tests」フォルダができています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/5b5923fe-8145-5653-62cc-ef7ae08c7bd2.png)
<br>
「tests」フォルダを開くと指定した20ファイルが作成されており、そのファイルの内容はスクリプトの「$x」の値が記載されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2632150/45812819-f50e-6e8b-e644-46dbe502bb5f.png)

無事にスクリプトは動作したようです。

## おわりに
というわけで今回はPowerShellでスクリプトを書いてみました。
取っかかりやすいものはあるかなと考えた結果、
ファイルを大量に作ってみようと思い立ったものの、
空ファイルを量産するのではなく中身付きがいいなと思ったので
今回のようなスクリプトになりました。

今回のものを改良すれば、例えばエラーメッセージが発生した際にエラーメッセージ内容別でファイルを作成したり、サーバ別に出力メッセージをテキスト化したりすることに使用できるかなと考えています。

では、今回はこのあたりで。

## 参考
今回参考はMicrosoft公式のコマンドリファレンスを参照しました。

[・If文 - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/scripting/learn/deep-dives/everything-about-if?view=powershell-5.1)
[・while文 - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_while?view=powershell-5.1)

[・Test-Path - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/test-path?view=powershell-5.1)
[・New-Item - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/new-item?view=powershell-5.1)
[・Join-Path - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.management/join-path?view=powershell-5.1)

[・Read-Host - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/read-host?view=powershell-5.1)
[・Write-Host - learn.microsoft.com](https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/write-host?view=powershell-5.1)