※本ページにはプロモーション(広告)が含まれています
【2026年最新版】Windowsバッチファイル・PowerShell基礎完全ガイド
Windowsで繰り返し行う作業を自動化したいと思ったことはありませんか?バッチファイル(.bat)やPowerShellスクリプトを使えば、ファイルのバックアップ・フォルダ整理・システム操作などを自動化して大幅に時間を節約できます。本記事では2026年最新版として、バッチファイルの基礎からPowerShellの実践まで、初心者にわかりやすく解説します。
- バッチファイル(.bat)とは何か、基本的な作り方・実行方法
- PowerShellとバッチファイルの違いと正しい使い分け
- よく使うバッチコマンド・PowerShellコマンドレット一覧
- コピー・バックアップ・クリーンアップなど実用サンプルスクリプト
- タスクスケジューラとの連携による定期自動実行
- よくあるエラーと対処法

バッチファイルとPowerShellの基礎知識
バッチファイル(.bat / .cmd)とは?
バッチファイルとは、Windowsのコマンドプロンプト(cmd.exe)で実行できる命令を複数まとめたテキストファイルです。拡張子は .bat または .cmd で、ファイルをダブルクリックするだけで記述したコマンドが上から順番に実行されます。
1980年代のMS-DOS時代から存在する歴史ある技術ですが、現在のWindows 11でも完全に動作します。シンプルなファイル操作・アプリ起動の自動化・定期クリーンアップなど、日常的な作業の効率化に今でも十分活躍します。プログラミング経験がない方でも比較的すぐに習得できるのが最大のメリットです。
PowerShellとは?
PowerShellはMicrosoftが開発した高機能なスクリプト言語とシェル環境を兼ね備えたツールです。Windows 7から標準搭載されており、現在はオープンソース化されてLinuxやmacOSでも動作するPowerShell 7(PowerShell Core)も提供されています。
コマンドプロンプトよりはるかに強力で、オブジェクト指向の処理・豊富な組み込み関数・.NET Frameworkとの連携・クラウドサービス管理など、プロフェッショナルなシステム管理に必要な機能を網羅しています。学習コストはやや高いですが、一度覚えると非常に強力な自動化が実現できます。
バッチファイルとPowerShellの違い比較表
| 比較項目 | バッチファイル(.bat) | PowerShell(.ps1) |
|---|---|---|
| 難易度 | ★☆☆(初心者向け) | ★★☆(中級者向け) |
| 機能の豊富さ | 基本的なコマンド操作のみ | 非常に豊富(.NET連携あり) |
| 拡張子 | .bat / .cmd | .ps1 |
| 実行方法 | ダブルクリックで即実行 | 実行ポリシー設定が必要な場合あり |
| データ処理 | テキストのみ | オブジェクト(構造化データ)対応 |
| エラーハンドリング | 限定的 | Try-Catch構文で柔軟に対応 |
| 変数・ループ | 基本的なsetコマンドとfor文 | 豊富な変数型・foreach・while・do-while |
| 外部連携 | コマンド呼び出し程度 | REST API・Azure・Microsoft 365対応 |
| 主な用途 | シンプルなファイル操作・起動自動化 | システム管理・複雑な自動化・クラウド管理 |
バッチファイルの作成方法と基本コマンド
バッチファイルの作り方(ステップ形式)
バッチファイルを作るのは非常に簡単です。Windowsに最初から入っているメモ帳(Notepad)があれば今すぐ始められます。
ステップ1: メモ帳を開く
スタートメニューの検索ボックスに「メモ帳」または「notepad」と入力してメモ帳を起動します。スタートメニューを開かずに、デスクトップで右クリック→「新規作成」→「テキストドキュメント」でも作成できます。
ステップ2: コマンドを記述する
以下のような簡単なサンプルを入力してみましょう。
@echo off
echo ============================
echo はじめてのバッチファイル
echo ============================
echo 現在の日時:
date /t
time /t
echo.
echo 処理が完了しました!
pause
ステップ3: .batファイルとして保存する
「ファイル」メニュー→「名前を付けて保存」を選びます。ダイアログが開いたら:
- 「ファイルの種類」を 「すべてのファイル(*.*)」 に変更する(ここが重要)
- ファイル名を
hello.batのように .bat 拡張子を付けて入力する - 文字コードは「ANSI」を選ぶ(日本語を使う場合)
- 「保存」をクリック
ステップ4: 実行する
保存した .bat ファイルをダブルクリックすると、コマンドプロンプトのウィンドウが開いて記述したコマンドが実行されます。pause が末尾にあるため「続行するには何かキーを押してください…」と表示されて待機します。
バッチファイルの基本コマンド一覧
| コマンド | 用途・説明 | 使用例 |
|---|---|---|
@echo off |
コマンド自体の表示を非表示にする。ファイル先頭に記述するのが定番 | ファイル1行目に記述 |
echo |
テキストをコンソールに表示する。echo.で空行を表示 |
echo 処理が完了しました |
pause |
キー入力待ちで一時停止する。ウィンドウが閉じるのを防ぐ | ファイルの末尾に記述 |
cd |
カレントディレクトリを変更する | cd C:\Users\username\Desktop |
mkdir |
新しいフォルダを作成する | mkdir backup_2026 |
copy |
ファイルをコピーする | copy file.txt backup\ |
xcopy |
フォルダごと再帰的にコピーする | xcopy /e /i /y src dst |
move |
ファイルを別の場所に移動する | move file.txt C:\Archive\ |
del |
ファイルを削除する | del temp.txt |
dir |
フォルダの内容を一覧表示する | dir /b *.txt |
set |
変数を定義・使用する。%変数名%で参照 |
set name=Taro / echo %name% |
if |
条件分岐。ファイル存在確認・文字列比較・数値比較が可能 | if exist file.txt echo あります |
for |
繰り返し処理。ファイル・フォルダ・テキスト行の反復処理 | for %%f in (*.txt) do echo %%f |
goto |
指定ラベルにジャンプする | goto :end |
call |
別のバッチファイルや関数を呼び出す | call other.bat |
timeout |
指定秒数待機する | timeout /t 5 /nobreak |
start |
アプリやファイルを起動する | start notepad.exe |
taskkill |
指定のプロセスを強制終了する | taskkill /f /im notepad.exe |
forfiles |
日付条件付きでファイルを処理する | forfiles /d -30 /m *.log /c "cmd /c del @path" |
chcp |
コードページ(文字コード)を変更する | chcp 65001(UTF-8) |
実用バッチファイル・サンプル集
サンプル1: デスクトップファイルを日付付きフォルダにバックアップ
@echo off
chcp 65001 > /dev/null
echo ============================
echo デスクトップ バックアップツール
echo ============================
:: 今日の日付を取得(YYYYMMDD形式)
for /f "tokens=1-3 delims=/" %%a in ('date /t') do (
set today=%%a%%b%%c
)
set source=%USERPROFILE%\Desktop
set dest=%USERPROFILE%\Documents\Backup_%today%
if not exist "%dest%" mkdir "%dest%"
echo バックアップ先: %dest%
xcopy /e /i /y "%source%" "%dest%"
echo.
echo バックアップ完了!
pause
サンプル2: 30日以上前のログファイルを自動削除
@echo off
echo 古いログファイルのクリーンアップを開始します...
set logpath=C:\Logs
if not exist "%logpath%" (
echo ログフォルダが見つかりません: %logpath%
goto :end
)
forfiles /p "%logpath%" /s /m *.log /d -30 /c "cmd /c del @path && echo 削除: @path"
echo クリーンアップ完了!
:end
pause
サンプル3: 業務開始時に複数アプリをまとめて起動
@echo off
echo 業務アプリを起動しています...
start "" "C:\Program Files\Google\Chrome\Application\chrome.exe"
timeout /t 2 /nobreak > /dev/null
start "" "C:\Windows\system32\notepad.exe"
timeout /t 1 /nobreak > /dev/null
start "" "C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE"
echo 起動完了!業務を開始してください。
timeout /t 3 /nobreak > nul
サンプル4: ファイルの存在チェックと条件分岐
@echo off
set target=C:\data\report.xlsx
if exist "%target%" (
echo ファイルが存在します: %target%
echo 処理を続行します...
copy "%target%" "%target%.bak"
echo バックアップ作成完了
) else (
echo エラー: ファイルが見つかりません
echo ファイルを確認してください: %target%
)
pause
PowerShellの基礎と使い方
PowerShellを起動する4つの方法
方法1: スタートメニューから起動
スタートメニューの検索ボックスに「powershell」と入力し、「Windows PowerShell」または「PowerShell 7」をクリックします。管理者権限が必要な場合は右クリック→「管理者として実行」を選択します。
方法2: ショートカットキーで起動
Win + X を押してメニューを開き、「Windows PowerShell」または「Windows Terminal」を選択します。Windows 11では「ターミナル」と表示される場合があります。
方法3: ファイルエクスプローラーから起動
フォルダを開いた状態でアドレスバーをクリックし「powershell」と入力してEnterキーを押すと、そのフォルダをカレントディレクトリとしてPowerShellが起動します。特定フォルダで作業したいときに便利です。
方法4: ファイルを右クリックして起動
.ps1スクリプトファイルを右クリックして「PowerShellで実行」を選択すると、そのスクリプトを直接実行できます。

PowerShellの基本コマンドレット(Cmdlet)一覧
PowerShellのコマンドは「コマンドレット(Cmdlet)」と呼ばれ、動詞-名詞 の形式で構成されています(例: Get-Process、Set-Item)。この命名規則により、コマンド名からおよその機能が推測できます。
| コマンドレット | 用途・説明 | 実用例 |
|---|---|---|
Get-Help |
コマンドのヘルプを表示する | Get-Help Get-Process -Full |
Get-Command |
利用可能なコマンドを検索する | Get-Command *Process* |
Get-Process |
実行中のプロセス一覧を取得する | Get-Process chrome |
Stop-Process |
プロセスを停止する | Stop-Process -Name notepad -Force |
Get-Service |
Windowsサービスの状態を取得する | Get-Service | Where Status -eq Running |
Start-Service / Stop-Service |
サービスを開始または停止する | Start-Service spooler |
Get-ChildItem |
フォルダの内容一覧を取得(ls/dirに相当) | Get-ChildItem C:\Users -Recurse |
Copy-Item |
ファイルまたはフォルダをコピーする | Copy-Item file.txt -Destination backup\ |
Move-Item |
ファイルまたはフォルダを移動する | Move-Item file.txt C:\Archive\ |
Remove-Item |
ファイルまたはフォルダを削除する | Remove-Item temp.txt |
New-Item |
新しいファイルまたはフォルダを作成する | New-Item -ItemType Directory -Name backup |
Get-Content |
ファイルの内容を読み込む | Get-Content log.txt -Tail 20 |
Set-Content / Add-Content |
ファイルに内容を書き込む・追記する | Add-Content log.txt "ログ追記" |
Where-Object |
パイプラインの結果を条件でフィルタリングする | Get-Process | Where-Object CPU -gt 50 |
Sort-Object |
結果を指定プロパティで並べ替える | Get-Process | Sort-Object CPU -Descending |
Select-Object |
特定のプロパティだけを選択して表示する | Get-Process | Select-Object Name, CPU, Id |
Export-Csv / Import-Csv |
CSVファイルにエクスポート・インポートする | Get-Process | Export-Csv procs.csv -Encoding UTF8 |
ConvertTo-Json / ConvertFrom-Json |
JSON形式に変換・JSONを解析する | $data | ConvertTo-Json | Set-Content data.json |
Write-Host |
コンソールに色付きメッセージを表示する | Write-Host "完了!" -ForegroundColor Green |
Invoke-WebRequest |
HTTPリクエストを送信する(Web/APIアクセス) | Invoke-WebRequest -Uri "https://example.com" |
Get-Date |
現在の日時を取得・フォーマットする | Get-Date -Format "yyyy-MM-dd" |
PowerShellスクリプトの実行ポリシー設定
PowerShellのスクリプトファイル(.ps1)は、Windowsの初期設定では実行が制限されています。これはセキュリティのための措置です。スクリプトを実行するには実行ポリシーの変更が必要です。
現在の実行ポリシーを確認する
Get-ExecutionPolicy
初期状態では Restricted(スクリプト実行禁止)と表示されることが多いです。
個人スクリプトの実行を許可する(推奨設定)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
各実行ポリシーの説明
| ポリシー名 | 概要 | 推奨場面 |
|---|---|---|
Restricted |
すべてのスクリプトの実行を禁止(Windows初期設定) | スクリプト使用しない場合 |
RemoteSigned |
ローカルスクリプトは実行可。ネット上のスクリプトは署名必須 | 個人使用におすすめ |
AllSigned |
すべてのスクリプトにデジタル署名が必要 | 企業・セキュリティ重視環境 |
Unrestricted |
すべてのスクリプトを実行可能(警告は出る) | 開発・テスト環境限定 |
Bypass |
ポリシーチェックをスキップ(警告なし) | 自動化パイプライン内での一時的な使用 |
PowerShell実用スクリプトサンプル集
サンプル1: ディスク使用量レポートを生成する
# ディスク使用量レポート生成スクリプト
$drives = Get-PSDrive -PSProvider FileSystem
Write-Host "=== ディスク使用量レポート ===" -ForegroundColor Cyan
Write-Host (Get-Date -Format "yyyy/MM/dd HH:mm")
Write-Host ""
foreach ($drive in $drives) {
if ($null -ne $drive.Used -and $null -ne $drive.Free) {
$used = [math]::Round($drive.Used / 1GB, 2)
$free = [math]::Round($drive.Free / 1GB, 2)
$total = $used + $free
$usedPct = [math]::Round($used / $total * 100, 1)
Write-Host "ドライブ: $($drive.Name):" -ForegroundColor Yellow
Write-Host " 使用済み : ${used} GB (${usedPct}%)"
Write-Host " 空き容量 : ${free} GB"
Write-Host " 合計 : ${total} GB"
Write-Host ""
}
}
サンプル2: 100MB以上の大きいファイルを検索してCSV出力
# 大きいファイル検索スクリプト
$targetPath = "C:\Users\$env:USERNAME\Documents"
$minSizeMB = 100
$outputCsv = "$env:USERPROFILE\Desktop\large_files.csv"
Write-Host "検索中: $targetPath(${minSizeMB}MB以上のファイル)" -ForegroundColor Cyan
Get-ChildItem -Path $targetPath -Recurse -ErrorAction SilentlyContinue |
Where-Object { $_.Length -gt ($minSizeMB * 1MB) } |
Select-Object Name,
@{N="サイズ(MB)"; E={[math]::Round($_.Length / 1MB, 2)}},
DirectoryName,
LastWriteTime |
Sort-Object "サイズ(MB)" -Descending |
Export-Csv -Path $outputCsv -Encoding UTF8 -NoTypeInformation
Write-Host "レポート保存完了: $outputCsv" -ForegroundColor Green
サンプル3: 特定フォルダの古いファイルを自動アーカイブ
# 90日以上前のファイルをArchiveフォルダに移動
$sourceDir = "C:\Work\Reports"
$archiveDir = "C:\Work\Archive"
$cutoffDate = (Get-Date).AddDays(-90)
if (-not (Test-Path $archiveDir)) {
New-Item -ItemType Directory -Path $archiveDir | Out-Null
}
$oldFiles = Get-ChildItem -Path $sourceDir -File |
Where-Object { $_.LastWriteTime -lt $cutoffDate }
Write-Host "移動対象: $($oldFiles.Count) ファイル"
foreach ($file in $oldFiles) {
Move-Item -Path $file.FullName -Destination $archiveDir -Force
Write-Host "移動: $($file.Name)" -ForegroundColor Gray
}
Write-Host "アーカイブ完了!" -ForegroundColor Green
タスクスケジューラとの連携で定期実行する
タスクスケジューラとは
Windowsに標準搭載されているタスクスケジューラを使えば、作成したバッチファイルやPowerShellスクリプトを指定した日時・間隔で自動実行できます。夜間バックアップ・定期レポート生成・古いファイルの自動整理などに活用できます。
タスクスケジューラでスクリプトを登録する手順
ステップ1: スタートメニューで「タスクスケジューラ」と検索して起動します。
ステップ2: 右ペインの「タスクの作成」をクリックします(「基本タスクの作成」よりも詳細な設定が可能)。
ステップ3: 「全般」タブの設定
- 名前: わかりやすい名前を付ける(例: 「毎日バックアップ」)
- 管理者権限が必要な場合は「最上位の特権で実行する」にチェック
ステップ4: 「トリガー」タブで実行タイミングを設定
- 「新規」をクリック→タスクの開始を「スケジュールに従う」に設定
- 「毎日」「毎週」「毎月」など繰り返しの種類と時刻を指定
ステップ5: 「操作」タブでプログラムを指定
- 「新規」をクリック
- バッチファイルの場合: プログラム欄に .bat ファイルのフルパスを入力
- PowerShellの場合: プログラム欄に
powershell.exe、引数欄に以下を入力
-ExecutionPolicy Bypass -NonInteractive -File "C:\Scripts\backup.ps1"

よくあるエラーと対処法
バッチファイルのよくあるエラー一覧
| エラー症状 | 原因 | 対処法 |
|---|---|---|
| 「〇〇は内部コマンドまたは外部コマンドとして認識されていません」 | コマンド名のスペルミス、またはPATHが通っていない | コマンド名を確認するかフルパスで指定する |
| ウィンドウが一瞬で閉じてしまう | スクリプトの末尾に pause がない、またはエラーで即終了 | 末尾に pause を追加する。コマンドプロンプトから手動実行してエラーを確認する |
| 日本語が文字化けする | ファイルの文字コードがUTF-8になっている | メモ帳でANSI(Shift-JIS)保存にする。またはファイル先頭に chcp 65001 を追加 |
| 「アクセスが拒否されました」 | 管理者権限が必要な操作を行っている | ファイルを右クリック→「管理者として実行」 |
| パスにスペースがあってエラーになる | スペースを含むパスが単語の区切りと認識される | パスをダブルクォーテーションで囲む("C:\Program Files\...") |
| for文でパーセント記号が動かない | コマンドプロンプトでは変数を %f、バッチファイルでは %%f と書く |
バッチファイル内では %% をダブルにする |
PowerShellのよくあるエラー一覧
| エラー症状 | 原因 | 対処法 |
|---|---|---|
| 「このシステムではスクリプトの実行が無効になっているため」 | 実行ポリシーがRestricted(初期設定) | Set-ExecutionPolicy RemoteSigned -Scope CurrentUser を実行する |
| 「コマンドレット名が見つかりません」 | スペルミスまたはモジュールがインストールされていない | Get-Command コマンド名 で存在を確認。モジュールが必要なら Install-Module |
| 「アクセス許可がありません」 | 管理者権限が必要な操作 | PowerShellを右クリック→「管理者として実行」 |
| CSV出力が文字化けする | デフォルトエンコーディングの問題 | Export-Csv に -Encoding UTF8 を追加する |
| パイプラインでエラーが出て処理が止まる | 途中のファイルにアクセス権がない・存在しない | -ErrorAction SilentlyContinue を追加するかTry-Catchで対処 |
よくある質問(FAQ)
Q1. バッチファイルとPowerShell、初心者はどちらから始めるべきですか?
バッチファイルから始めることをおすすめします。文法がシンプルで、メモ帳で書いてダブルクリックするだけで動くため、スクリプトの基本的な概念(コマンドの連続実行・条件分岐・繰り返し)を理解しやすいです。バッチファイルに慣れてきたら、次のステップとしてPowerShellを学ぶと自然にスキルアップできます。
Q2. バッチファイルをダブルクリックしても一瞬で画面が閉じてしまいます。どうすればいいですか?
スクリプトの最後に pause コマンドを追加してください。pause があると「続行するには何かキーを押してください…」と表示され、ウィンドウが閉じなくなります。エラーで閉じている場合は、コマンドプロンプトを別途開いてバッチファイルのフルパスを入力して実行するとエラーメッセージを確認できます。
Q3. PowerShellで「スクリプトの実行が無効」と表示されます。解決策を教えてください。
PowerShellを管理者として起動し、Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser を実行してください。RemoteSigned はローカルのスクリプトを実行可能にしつつ、インターネットからダウンロードしたスクリプトにはデジタル署名を要求する安全な設定です。
Q4. バッチファイルで日本語ファイル名を使うと文字化けします。
バッチファイルをメモ帳で保存するときに「ANSI(Shift-JIS)」エンコードで保存してください。UTF-8で保存すると日本語が文字化けすることがあります。ファイル先頭に chcp 65001(UTF-8)と記述する方法もありますが、その場合はファイル自体もUTF-8 BOM付きで保存する必要があります。
Q5. バッチファイルからPowerShellスクリプトを呼び出せますか?
はい、可能です。バッチファイルに次のように記述します。
powershell.exe -ExecutionPolicy Bypass -NonInteractive -File "C:\Scripts\myscript.ps1"
-ExecutionPolicy Bypass を指定することで、システムの実行ポリシー設定に関わらずスクリプトを実行できます。
Q6. スクリプトをバックグラウンドで実行したいのですが、可能ですか?
バッチファイルの場合は start /b コマンド を使います。PowerShellの場合は Start-Job コマンドレットでバックグラウンドジョブとして実行できます。完全に非表示で実行したい場合は Start-Process powershell.exe -WindowStyle Hidden -ArgumentList ... を使う方法もあります。
Q7. スクリプトで変数を使う方法を教えてください。
バッチファイルでは set 変数名=値 で定義し、%変数名% で参照します。例: set mypath=C:\backup → echo %mypath%。PowerShellでは $変数名 = 値 で定義し、$変数名 で参照します。例: $myPath = "C:\backup" → Write-Host $myPath。
Q8. PowerShellで処理の途中でエラーが発生しても続けたい場合はどうしますか?
コマンドに -ErrorAction SilentlyContinue を付けるか、Try-Catch 構文を使います。
Try {
Remove-Item "存在しないファイル.txt" -ErrorAction Stop
} Catch {
Write-Host "エラーをキャッチしました: $($_.Exception.Message)" -ForegroundColor Yellow
}
Q9. Windows 11でPowerShell 7を使うメリットはありますか?
Windows標準搭載のPowerShell 5.1と比べ、PowerShell 7には多くの改善があります。クロスプラットフォーム対応(Linux/macOSでも動作)・最新の.NETの機能が利用可能・ForEach-Object -Parallel による並列処理・より優れたエラーメッセージなどが挙げられます。本格的な業務スクリプト開発を行うならPowerShell 7がおすすめです。Microsoft Storeから無料でインストールできます。
Q10. スクリプトを毎日決まった時間に自動実行させるにはどうすればいいですか?
Windowsのタスクスケジューラを使います。スタートメニューで「タスクスケジューラ」を起動し、「タスクの作成」から実行したいスクリプトのパスと実行時刻を設定するだけで、PCの電源が入っている間は指定した時刻に自動実行されます。ログオフ中でも実行させたい場合は「ユーザーがログオンしているかどうかにかかわらず実行する」を選択してください。
まとめ
バッチファイルとPowerShellは、Windows作業の自動化に欠かせない強力なツールです。この記事の重要ポイントをまとめます。
- バッチファイル(.bat) は初心者でもすぐ始められるシンプルな自動化ツール。ファイル操作・アプリ起動の自動化に最適
- PowerShell はより強力で、システム管理・複雑なデータ処理・クラウド連携に向いている
- どちらもメモ帳だけで作成でき、特別なソフトウェアは不要
- タスクスケジューラと組み合わせることで、完全自動の定期実行が実現できる
- まずは
@echo off+pauseの2行から始め、徐々にコマンドを追加していくのがおすすめ
困ったときは Get-Help コマンド名(PowerShell)や コマンド名 /?(バッチファイル)でヘルプを参照できます。また、Microsoft公式ドキュメント(learn.microsoft.com)も充実しているので、詳細な情報が必要なときはぜひ活用してください。繰り返しの作業を自動化することで、より重要な業務に集中できる時間を生み出しましょう。
minto.tech スマホ(Android/iPhone)・PC(Mac/Windows)の便利情報をお届け! 月間アクセス160万PV!スマートフォン、タブレット、パソコン、地デジに関する素朴な疑問や、困ったこと、ノウハウ、コツなどが満載のお助け記事サイトはこちら!