Windows PowerShellからPowerShell 7.x(Core)へと進化を続ける中で、システム管理や自動化作業におけるファイル操作の重要性はますます高まっています。
その中でも、ファイルやフォルダを新規作成するためのNew-Itemコマンドレットは、日常的なスクリプト作成において最も頻繁に使用されるツールの一つです。
従来のコマンドプロンプトでは、フォルダ作成にmkdir、空ファイル作成に独自の工夫が必要でしたが、PowerShellのNew-Itemを使用すれば、これらすべてを統合的かつ柔軟に制御できます。
本記事では、基本的な作成方法から、複数アイテムの一括作成、既存ファイルの上書き設定、そして実務で役立つ応用テクニックまで詳しく解説します。
New-Itemコマンドレットの基本概念
PowerShellにおけるアイテム作成の基本は、New-Itemコマンドレットを理解することから始まります。
このコマンドレットはファイルシステムだけでなく、レジストリや証明書ドライブなど、PowerShellが「ドライブ」として認識している場所であればどこでも新しい要素を作成できる汎用性を持っています。
基本的な構文は以下の通りです。
# 基本的な構文のイメージ
New-Item -Path "パス" -ItemType "種類" -Value "内容"
もっとも重要なパラメーターは、作成先を指定する-Path、作成する対象がファイルかフォルダかを指定する-ItemType、そしてファイルの内容を初期設定する-Valueの3点です。
ItemTypeに指定できる主な値
-ItemTypeパラメーターには、作成したいオブジェクトの種類を指定します。
ファイルシステム操作において頻繁に使用される値は以下の通りです。
| 指定する値 | 作成されるもの |
|---|---|
| File | 通常のファイル |
| Directory | フォルダ(ディレクトリ) |
| SymbolicLink | シンボリックリンク |
| Junction | ジャンクション(ディレクトリへのリンク) |
| HardLink | ハードリンク |
多くの場合、FileまたはDirectoryを指定することになります。
この指定を省略した場合、PowerShellのバージョンや環境によっては意図しない挙動になることがあるため、明示的に指定することを推奨します。
ファイルを新規作成する方法
まずは、最も基本的なファイルの作成方法を確認しましょう。
特定のディレクトリに空のテキストファイルを作成する例です。
# sample.txtという名前の空ファイルを作成する
New-Item -Path "C:\temp\sample.txt" -ItemType File
ディレクトリ: C:\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2026/05/04 10:00 0 sample.txt
このように、コマンドを実行すると作成されたファイルのオブジェクト情報が返されます。
初期内容を含めてファイルを作成する
ファイル作成と同時にテキストを書き込みたい場合は、-Valueパラメーターを使用します。
# 内容を指定してファイルを作成
New-Item -Path "C:\temp\hello.txt" -ItemType File -Value "PowerShellの世界へようこそ"
これにより、ファイル作成後に別途Add-ContentやSet-Contentを実行する手間を省くことができます。
ただし、大規模なテキストデータやバイナリデータを扱う場合は、専用の書き込みコマンドレットを検討したほうが良い場合もあります。
フォルダ(ディレクトリ)を新規作成する方法
フォルダを作成する場合も、基本的な使い方はファイルと同じです。
-ItemTypeにDirectoryを指定します。
# 新しいフォルダを作成
New-Item -Path "C:\temp\NewProject" -ItemType Directory
中間ディレクトリを自動的に作成する
New-Itemの非常に便利な点として、指定したパスの途中に存在するフォルダがなくても、自動的に作成してくれる機能があります(後述する-Forceパラメーターを組み合わせた際の挙動を含む)。
例えば、C:\tempの中にまだ存在しないA\B\Cという深い階層のフォルダを作りたい場合、他の言語や環境では「まずAを作り、次にBを作る」というステップが必要ですが、PowerShellでは一気に記述できます。
# 深い階層のフォルダを一度に作成
New-Item -Path "C:\temp\A\B\C" -ItemType Directory
このように記述するだけで、階層構造を維持したまま必要なすべての親ディレクトリを自動生成してくれます。
複数アイテムを一度に一括作成する方法
実務のスクリプトでは、複数のファイルやフォルダをまとめて準備したい場面が多くあります。
PowerShellでは配列を利用することで、ループ処理を記述しなくても一括作成が可能です。
配列を使用した一括作成
-Pathパラメーターには、文字列の配列を渡すことができます。
# 複数のファイルを一括作成
$files = "file1.txt", "file2.txt", "file3.dat"
New-Item -Path $files -ItemType File
また、フォルダとファイルを混在させて作成したい場合は、フルパスの配列を渡す手法が有効です。
# 異なる種類のアイテムをリストに基づいて作成
$targets = @(
"C:\temp\Project\logs",
"C:\temp\Project\config\settings.conf",
"C:\temp\Project\readme.md"
)
foreach ($item in $targets) {
if ($item.EndsWith("\") -or $item -notlike "*.*") {
New-Item -Path $item -ItemType Directory -Force
} else {
New-Item -Path $item -ItemType File -Force
}
}
このように、リストを処理することで、複雑なプロジェクト構造を瞬時に構築できます。
連番ファイルの作成
範囲演算子(..)を利用して、大量のテストデータを生成することも簡単です。
# test01.txtからtest10.txtまでを一括作成
1..10 | ForEach-Object {
$name = "test{0:D2}.txt" -f $_
New-Item -Path "C:\temp\$name" -ItemType File
}
このワンライナーは、開発環境のテストデータを準備する際などに非常に重宝します。
重複時の動作と上書き設定(-Forceパラメーター)
New-Itemを実行した際、作成しようとしているファイルが既に存在する場合、PowerShellはデフォルトでエラーを返します。
# 同じファイルを作成しようとするとエラーになる
# New-Item : ファイル 'C:\temp\sample.txt' は既に存在します。
この挙動を制御するのが、-Forceパラメーターです。
強制的に上書きする
-Forceを使用すると、既存のファイルがある場合でも、既存の内容を破棄して新しい空ファイル(またはValueで指定した内容)に置き換えます。
# 既存のファイルを上書きして新しく作成
New-Item -Path "C:\temp\sample.txt" -ItemType File -Force
注意点として、フォルダに対して-Forceを使用した場合は、ファイルと挙動が異なります。
フォルダが既に存在する場合、その中身を削除することなく、既存のフォルダオブジェクトをそのまま返します。
つまり、フォルダの場合は「上書き」ではなく「既存のものを再利用する」という動作になります。
安全に作成するための条件分岐
上書きしたくないが、エラーも出したくないという場合は、Test-Pathコマンドレットを組み合わせて存在確認を行うのがベストプラクティスです。
$path = "C:\temp\important_data.txt"
if (-not (Test-Path $path)) {
New-Item -Path $path -ItemType File
Write-Host "ファイルを作成しました。"
} else {
Write-Host "ファイルが既に存在するため、作成をスキップしました。" -ForegroundColor Yellow
}
このように記述することで、既存の重要なデータを誤って消去してしまうリスクを回避できます。
実践的な応用テクニック
シンボリックリンクの作成
Windows環境でも、開発やシステム管理においてシンボリックリンク(ショートカットの高度な版)が必要になることがあります。
PowerShell 5.0以降、New-Itemでこれを作成できるようになりました。
# フォルダへのシンボリックリンクを作成
New-Item -Path "C:\LinkToData" -ItemType SymbolicLink -Target "D:\RealData\LargeFolder"
これにより、アプリケーションからはC:\LinkToDataにあるように見えつつ、実体はD:ドライブに置くといった運用が可能になります。
日付を含んだログファイルの自動生成
バッチ処理や自動化スクリプトでは、実行時の日付をファイル名に含めるのが一般的です。
# 実行時の日付をファイル名に使用
$today = Get-Date -Format "yyyyMMdd_HHmm"
$logFile = "C:\logs\process_$today.log"
# フォルダがなければ作成し、ファイルも作成
if (-not (Test-Path "C:\logs")) {
New-Item -Path "C:\logs" -ItemType Directory
}
New-Item -Path $logFile -ItemType File
パイプラインを介した効率的な処理
New-Itemはパイプライン入力を受け入れるため、他のコマンドレットの結果をそのままファイル作成に繋げることができます。
# 文字列のリストから一気にフォルダを作成
"Finance", "Sales", "HR", "IT" | New-Item -ItemType Directory -Path { "C:\CompanyData\$_" }
この記法では、$\_(現在のパイプラインオブジェクト)をパスの一部として動的に展開しています。
複雑なディレクトリ構造を動的に生成する際に非常に強力な手法です。
エラーハンドリングとトラブルシューティング
New-Itemを使用する際、いくつかの典型的なエラーに遭遇することがあります。
- アクセス許可(権限)の不足
C:\WindowsやC:\Program Filesなどの保護された領域にアイテムを作成しようとすると、アクセス拒否エラーが発生します。この場合は、PowerShellを「管理者として実行」する必要があります。 - 無効な文字
Windowsのファイル名には、\ / : \* ? " < > |といった文字を使用できません。変数を使って動的に名前を付ける際は、これらの禁止文字が含まれていないかチェックするか、置換処理を行う必要があります。 - パスの長さ制限
Windowsの伝統的な制限である260文字を超えるパスを指定すると、エラーになる場合があります。最新のWindows 10/11環境ではレジストリ設定で緩和可能ですが、スクリプトの互換性を考える場合は、極端に長いパスは避けるのが無難です。
まとめ
PowerShellのNew-Itemは、単なるファイル作成コマンドの枠を超えた、非常に強力なリソース作成ツールです。
-ItemTypeを使い分けることで、ファイル、フォルダ、シンボリックリンクを同一のインターフェースで作成できる。-Forceパラメーターを活用することで、既存アイテムの上書きや中間ディレクトリの自動生成が可能になる。- 配列やパイプライン、変数展開(
Get-Dateなど)を組み合わせることで、複雑な自動化シナリオに対応できる。
これらの機能を使いこなすことで、手動でのフォルダ作成作業から解放され、ミスのない効率的なシステム管理が実現します。
まずはシンプルなファイル作成から試し、徐々にパイプラインや一括作成などの高度なテクニックを自身のスクリプトに取り入れてみてください。
