業務上での煩雑なファイル管理や、新しいプロジェクトの立ち上げ時に必要となるフォルダ構造の準備。
これらは時間がかかる作業であると同時に、ミスが発生しやすいタスクでもあります。では、これらのプロセスを簡単かつ迅速に、正確に実行する方法はないものでしょうか?
実は、PowerShellのNew-Item
コマンドレットを用いることで、この課題を解決できます。コマンド一つで瞬時にファイルやフォルダを作成しますので、業務の効率性を大きく高めることが可能です。
しかし、PowerShellを日常業務に取り入れることにはまだ抵抗があるかもしれません。コードを書く必要があるから、とか、専門的な知識が必要だから、といった理由で敬遠している方も多いでしょう。
この記事では、PowerShellのNew-Item
コマンドレットの基本から応用まで、実例を用いて分かりやすく解説します。
PowerShellでファイル・フォルダ作成
この章では、PowerShellでファイルやフォルダを作成する基本的な方法について説明します。作成には、コマンドレットNew-Item
を使います。
また、New-Item
で使われる主なパラメーターについても紹介します。
作業用ディレクトリの作成
PowerShellでファイルやフォルダを作成するときには、作業用のディレクトリを作成しておくと安心です。たとえばPowerShellを実行したあと想定外の動きをしても、その時に作成した作業フォルダであれば既存ファイルには影響しません。
不慣れな時期はもちろん、大量の作業をPowerShellで実行する場合には、作業用ディレクトリであれば安心して実行できるでしょう。
コマンドレット_New-Item
では、実際にPowerShellを使ってファイルやフォルダを作成する方法を紹介します。ここでは、PowerShellのコマンドレットNew-Item
を使います。
下記のコマンドレットを実行することで、指定のディレクトリにファイルやフォルダを作成することができます。
ファイル作成:New-Item
New-Item -Path 'C:\temp\MyNewFile.txt' -ItemType File
このコマンドは、C:\temp
ディレクトリ内に MyNewFile.txt
という新しいテキストファイルを作成します。
フォルダ作成:New-Item
New-Item -Path 'C:\temp\MyNewFolder' -ItemType Directory
このコマンドは、C:\temp
ディレクトリ内に MyNewFolder
という新しいフォルダを作成します。
New-Itemの主なパラメーター
コマンドラインインターフェースやプログラミング言語においては、コマンドの動作を細かく制御するために「パラメーター」が使用されます。
パラメーターは命令に追加情報を記述することで、動作をより詳細に指定するための機能です。
PowerShellのコマンドレットでは、パラメーターを下記のように記述します(赤字箇所)。
New-Item -Path ‘C:\temp\MyNewFolder’ -ItemType Directory
半角スペース+ハイフン+パラメーター
パラメーターの概要の詳細は別記事で取り上げますが、この記事ではNew-Item
で使われる主なパラメーターについて説明します。
-Path
-Path
は、新しく作成されるファイルやフォルダの場所を明示的に指定するためのパラメーターです。下記のコマンドは、C:\temp
ディレクトリ内に Sampleフォルダ
というフォルダを作成します。
New-Item -Path "C:\temp\Sampleフォルダ" -ItemType Directory
-ItemType
-ItemType
は、作成するアイテムのタイプ(File
、Directory
など)を指定します。下記のコマンドは、C:\temp
ディレクトリ内に Sampleファイル.txt
というテキストファイルを作成します。
New-Item -Path "C:\temp\Sampleファイル.txt" -ItemType File
-Force
-Force
パラメーターは、既存のファイルやフォルダを上書きする場合や、中間ディレクトリが存在しない場合にそれらを強制的に作成する場合に使用されます。
たとえば、Sampleファイル
を作成する場合、-Force
パラメーターを使えば、コマンドラインに記述した中間ディレクトリが存在しなくても、記述された中間ディレクトリも含めてSampleファイル
を作成します。
New-Item -Path ‘C:\temp\temp2/temp3/Sampleファイル‘ -ItemType File -Force
→tempフォルダしか存在していない場合、temp2、temp3のフォルダが作成されたうえで、Sampleファイルが作成される。
下記のコマンドは、すでに存在する Sampleフォルダ
を上書きして新しいフォルダを作成します。
New-Item -Path "C:\temp\Sampleフォルダ" -ItemType Directory -Force
-Value
-Value
パラメーターは、新しく作成されるファイルに文字列を書き込む際に使用されます。このパラメーターはファイルを作成する場合にのみに使います。
下記のコマンドは、C:\temp
ディレクトリ内に Sampleファイル.txt
というテキストファイルを作成し、その中に “Hello, World!” という文字列を書き込みます。
New-Item -Path "C:\temp\Sampleファイル.txt" -ItemType File -Value "Hello, World!"
-Force
や-Value
は基本動作に強制実行や書き込みの動作を追加する際に使いますが、-Path
や-ItemType
は基本動作に含まれる動作です。
すべてのNew-Item
使用下で必須と思える-Path
ですが、実は記述必須ではありません。つまり省略することが可能です。New-Item
で-Path
を省略した場合、カレントディレクトリにファイルやフォルダを作成します。
一方、-ItemType
を省略した場合、PowerShellの挙動は不確実です。意図したアイテムタイプ(ファイルやフォルダ)を確実に作成するためには、-ItemType
を省略せずに指定することが重要です。
特に「フォルダ」を作成する意図がある場合、-ItemType Directory
の指定は不可欠です。
可読性が高いコードを書くためには、-Path
や-ItemType
も含め、必要なパラメーターを明示的に記述するほうが望ましいでしょう。
PowerShellで大量ファイル・フォルダを一瞬で作成
この章では、PowerShellでファイルやフォルダを大量に作成する方法について、説明します。前章で取り上げたNew-Itemのほか、コマンドレット「ForEach-Object」も使います。
PowerShellを使えば、100や1,000のファイル・フォルダでも一瞬で作成することができます。
コマンドレット_ForEach-Object
ここでは、コマンドレットForEach-Object
を使用して、PowerShellで大量のファイルやフォルダを一瞬で作成する方法を説明します。
ForEach-Object
は、コレクションの各アイテムに対してコマンドを実行します。
たとえば、指定したパスに1から100までの番号を付けたファイルを作成したい場合、1..100
という範囲演算子を使用して数値のリストを生成し、ForEach-Object
コマンドレットを使用します。
このコマンドは、それぞれの数値に対してNew-Item
コマンドを実行します。
1..100 | ForEach-Object { New-Item -Path "C:\temp\Sampleファイル$_.txt" -ItemType File }
その他:forループ
PowerShellでは、for
ループを使用して繰り返し処理を行うこともできます。
for
ループは、特定の条件が満たされるまで繰り返し処理を実行するための構文であり、大量のファイルやフォルダを作成するときに有効です。
補足ですが、for
ループはコマンドレットではありません。for
ループは、PowerShellを含む多くのプログラミング言語で利用される基本的な制御構造(制御文)です。
次のFor
ループを用いたコマンドは、前節のForEach-Object
と同じ結果を返します。
for ($i = 1; $i -le 100; $i++) {
New-Item -Path "C:\temp\Sampleファイル$i.txt" -ItemType File
}
応用:New-Itemの活用事例
この章では、PowerShellでファイルやフォルダを作成する活用例を紹介します。PowerShellは、さまざまなニーズに対して活用できるポテンシャルがありますが、その中でも比較的汎用性の高い事例を取り上げます。
通常のGUI(マウス)で実施するよりも優れたPowerShellの利点も見えてくるでしょう。
指定の文字列を書き込んだファイル作成
指定の文字列を含む新しいテキストファイルを作成する場合、-Value
パラメーターを使用して内容を直接書き込むことができます。設定ファイルや初期化スクリプトを作成する際に便利です。
下記のコマンドを実行すると、指定されたパスに文字列 "これはテストファイルです。"
を含む Sampleファイル.txt
を作成します。
New-Item -Path "C:\temp\Sampleファイル.txt" -ItemType File -Value "これはテストファイルです。"
指定のフォーマットの日付を書き込んだファイル作成
現在の日付や指定のフォーマットで日付をファイルに書き込むには、コマンドレットGet-Date
を使います。ログファイルやレポートの生成に活用できます。
下記のコマンドを実行すると、ファイル名に現在の日付を含めて、その日付をファイルの中にも書き込みます。
$dateString = Get-Date -Format "yyyy-MM-dd"
New-Item -Path "C:\temp\date_$dateString.txt" -ItemType File -Value "ログ生成日: $dateString"
日付をフォルダ名に含めた作成
自動化されたバックアップやアーカイブのために、日付をフォルダ名に含めて作成することができます。システムの保存先として定義されたフォルダを作成する際に便利です。
下記のコマンドを実行すると、現在の日付をフォルダ名に含めて新しいフォルダを作成します。
$dateFolder = Get-Date -Format "yyyy-MM-dd"
New-Item -Path "C:\temp\$dateFolder" -ItemType Directory
Wordファイルの作成
ComObject
オブジェクトを使用することで単なるテキストファイルではなく、MicrosoftのWordファイルも作成できます。簡単な例として、空のWord文書を作成する方法を紹介します。
下記のコマンドを実行すると、まずMicrosoftWordアプリケーションを起動し、新しい文書を作成して Sampleワード.docx
として保存し、最後にWordを閉じます。
$word = New-Object -ComObject Word.Application
$document = $word.Documents.Add()
$document.SaveAs([ref]"C:\temp\Sampleワード.docx")
$word.Quit()
PowerShellのNew-Item
コマンドレットを使用すると、.txt
ファイルを簡単に一行で作成できますが、Microsoft WordやExcelの.docx
、.xlsx
ファイルの作成にはより複雑なコマンドが必要です。
その理由は、下記の通りです。
.txt
ファイルはプレーンテキストのみを含み、特別なフォーマットやスタイリングを必要としません。- 一方、
.docx
、.xlsx
ファイルはテキストスタイリング、フォーマット、画像、表など多様な要素を含む複雑な構造を持っています。
このようなファイルタイプの違いにより、.docx
、.xlsx
ファイルの作成には、それぞれのアプリケーションのオブジェクトモデルにアクセスし、操作する必要があるのです。
テンプレートフォルダ階層の作成
プロジェクトやアプリケーションのための特定のフォルダ構造を繰り返し作成する必要がある場合、New-Item
を使ってテンプレートとしてのフォルダ階層を一度に作成できます。
下記のコマンドを実行すると、ソースコード、ドキュメント、テスト用の基本フォルダを含むプロジェクトテンプレートを作成します。
$basePath = "C:\temp\ProjectTemplate"
New-Item -Path "$basePath\src" -ItemType Directory
New-Item -Path "$basePath\docs" -ItemType Directory
New-Item -Path "$basePath\tests" -ItemType Directory
ファイル・フォルダ作成のエラーハンドリング
この章では、PowerShellでファイルやフォルダを作成するにあたって、発生しやすいエラーを回避するエラーハンドリングについて説明します。
アクセス権限に関するエラーやファイル・フォルダパスに関連するエラーの回避策について、紹介します。
アクセス権限エラーの処理
アクセス権限エラーは、ファイルやフォルダを作成しようとした際に、指定したパスに対する適切な書き込み権限がない場合に発生します。
これを回避するには、まず実行しているユーザーが目的の場所にファイルやフォルダを作成するための権限を持っていることを確認する必要があります。
下記のコマンドは、アクセス権限エラーが発生した場合に、適切な警告メッセージを表示します。-ErrorAction Stop
パラメーターは、エラーを例外として扱い、try-catch
ブロックで回避できるようにします。
try {
New-Item -Path "C:\Protected\example.txt" -ItemType File -ErrorAction Stop
} catch [System.UnauthorizedAccessException] {
Write-Warning "アクセス権限エラーが発生しました。適切な権限でスクリプトを実行してください。"
}
ファイル・フォルダパス関連のエラー
ファイルやフォルダのパスに関連するエラーは、指定したパスが不正であるか、存在しない場所を指す場合に発生します。
たとえば、タイプミスや不正な文字の使用、存在しないディレクトリへのパス指定なども含まれます。
このエラーを回避するためには、パスが正しい形式であることを事前に検証し、必要に応じてディレクトリを事前に作成することが有効です。
下記のコマンドは、ファイルを作成する前に、指定されたパスのディレクトリが存在するかを検証し、存在しない場合にはディレクトリを新規作成します。そのため、パスに関連するエラーを事前に防ぐことができます。
$path = "C:\Nonexistent\example.txt"
$directory = Split-Path -Path $path -Parent
if (-not (Test-Path -Path $directory)) {
New-Item -Path $directory -ItemType Directory -Force
}
New-Item -Path $path -ItemType File
あとがき
今回は、多くのPowerShellの機能のうち、ファイルやフォルダを作成するためのNew-Item
について、基本的な内容から応用まで紹介しました。
使い道が分かり辛いPowerShellも、今回のような機能を理解することで、実務に活用できる企業も多いのではないでしょうか。
PowerShellは、特にシステム管理者や開発者にとって高いポテンシャルを発揮するツールです。
今回紹介したNew-Item
以外にも、多くのコンピューティングニーズを満たす機能が搭載されています。引き続き、当サイトの記事をご覧いただければ幸いです。