PowerShellでファイル・フォルダを作成する|New-Itemを解説

業務上での煩雑なファイル管理や、新しいプロジェクトの立ち上げ時に必要となるフォルダ構造の準備。

これらは時間がかかる作業であると同時に、ミスが発生しやすいタスクでもあります。では、これらのプロセスを簡単かつ迅速に、正確に実行する方法はないものでしょうか?

実は、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 は、作成するアイテムのタイプ(FileDirectoryなど)を指定します。下記のコマンドは、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()
WordやExcel

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以外にも、多くのコンピューティングニーズを満たす機能が搭載されています。引き続き、当サイトの記事をご覧いただければ幸いです。

目次