バッチファイルからフォルダを開く操作は、処理完了後に出力先を自動表示したり、よく使うフォルダへのランチャーを作ったりと、業務自動化で頻繁に使われます。
この記事では start と explorer の使い分けから、%~dp0 による相対パス指定、IF EXIST を使った存在チェック、複数フォルダの同時展開まで、実践例を交えて完全解説します。
startコマンドでフォルダを開く(基本)
バッチファイルでフォルダを開く最もシンプルな方法は start コマンドです。
構文:
start "" "フォルダパス"
第1引数はウィンドウのタイトルです。空文字列 "" を指定するのが一般的です(省略するとパスがタイトルになることがあります)。
実行例:
@echo off start "" "C:\Users\Public\Documents"
start "" "." でカレントディレクトリを開くこともできます。
@echo off start "" "."
explorerコマンドとの違い
startコマンドとexplorerコマンドはどちらもエクスプローラーでフォルダを開きますが、動作に違いがあります。
| 項目 | start “” “パス” | explorer “パス” |
|---|---|---|
| 推奨度 | ★★★(推奨) | ★★(サブ的用途) |
| スペース含むパス | ダブルクォートでOK | ダブルクォートでOK |
| バッチ処理の継続 | 即座に次の行へ(非同期) | 即座に次の行へ(非同期) |
| ネットワークパス | 対応 | 対応 |
| 引数の柔軟性 | 高い(タイトル指定等) | やや低い |
日常的には start コマンドを使い、explorer は特定のオプション(例: explorer /select,"ファイル" でファイルを選択状態で開く)を使いたいときに補助的に使います。
@echo off explorer "C:\Users\Public\Documents"
パスの書き方:絶対パス・相対パス・%~dp0
絶対パス(フルパス)
ドライブレターから始まる完全なパスです。どこから実行しても同じフォルダが開きます。
start "" "C:\Users\Public\Documents"
%~dp0:バッチファイルの場所を基準にする
%~dp0 はバッチファイル自身があるフォルダのパス(末尾に \ 付き)に展開される特殊変数です。バッチをどこに置いても相対的なフォルダが開けます。
詳しくは「バッチファイルで自分自身のフォルダパスを取得する方法(%~dp0)」を参照してください。
@echo off :: バッチファイルと同じフォルダを開く start "" "%~dp0" :: バッチファイルから見て output フォルダを開く start "" "%~dp0output" :: 一つ上のフォルダを開く start "" "%~dp0.."
%~dp0の末尾スラッシュに注意:%~dp0 は C:\Work\ のように末尾に \ が付いています。サブフォルダを連結するときは %~dp0output(バックスラッシュなし)と書きます。
特殊フォルダを開く(環境変数の活用)
デスクトップやドキュメントなどは環境変数を使うことで、ユーザー名が異なる環境でも正しく動作します。
@echo off :: デスクトップ start "" "%USERPROFILE%\Desktop" :: ドキュメント start "" "%USERPROFILE%\Documents" :: ダウンロード start "" "%USERPROFILE%\Downloads" :: Windowsフォルダ start "" "%WINDIR%" :: Tempフォルダ start "" "%TEMP%"
フォルダの存在チェックをしてから開く
存在しないフォルダを開こうとするとエラーダイアログが表示されます。IF EXIST で事前チェックするのがベストプラクティスです。
詳しくは「バッチファイルでIF EXISTを使ってファイル・フォルダの存在チェックをする方法」も参照してください。
@echo off
set "TARGET=C:\Logs\output"
if exist "%TARGET%\" (
echo フォルダを開きます: %TARGET%
start "" "%TARGET%"
) else (
echo フォルダが存在しません: %TARGET%
pause
)
フォルダ判定のポイント:if exist "%TARGET%\" のように末尾に \ を付けることで、ファイルではなくフォルダとして判定できます。
複数フォルダを同時に開く
start コマンドは非同期で実行されるため、複数行に並べると同時に複数のエクスプローラーウィンドウが開きます。
@echo off start "" "C:\Work\src" start "" "C:\Work\docs" start "" "C:\Work\output" echo 3つのフォルダを開きました
実践例A:処理完了後に出力フォルダを自動表示する
ファイル変換・集計・ダウンロードなどの処理が終わったら、自動で出力フォルダを開くパターンです。
@echo off setlocal set "OUTPUT_DIR=%~dp0output" :: 出力フォルダがなければ作成 if not exist "%OUTPUT_DIR%\" mkdir "%OUTPUT_DIR%" echo ファイル処理を開始します... :: ---- ここに処理を記述 ---- echo 処理中... > "%OUTPUT_DIR%\result.txt" :: --------------------------- echo 処理が完了しました。 echo 出力先: %OUTPUT_DIR% :: 処理完了後に出力フォルダを自動表示 start "" "%OUTPUT_DIR%" endlocal
実践例B:よく使うフォルダのランチャー
番号を選ぶだけで目的のフォルダが開くシンプルなランチャーです。set /p による入力と組み合わせています。
@echo off setlocal :MENU echo ============================ echo フォルダランチャー echo ============================ echo 1. デスクトップ echo 2. ドキュメント echo 3. プロジェクトフォルダ echo 4. Tempフォルダ echo 0. 終了 echo ============================ set /p CHOICE=番号を入力してください: if "%CHOICE%"=="1" ( start "" "%USERPROFILE%\Desktop" & goto :EOF ) if "%CHOICE%"=="2" ( start "" "%USERPROFILE%\Documents" & goto :EOF ) if "%CHOICE%"=="3" ( start "" "C:\Work\MyProject" & goto :EOF ) if "%CHOICE%"=="4" ( start "" "%TEMP%" & goto :EOF ) if "%CHOICE%"=="0" goto :EOF echo 無効な番号です。1〜4または0を入力してください。 goto :MENU endlocal
実践例C:フォルダがなければ作成してから開く
日付フォルダを自動生成して開く例です。フォルダがない場合は mkdir で作成し、作成後に開きます。
フォルダ作成の詳細は「バッチファイルでフォルダを作成する方法(mkdir・md)」を参照してください。
@echo off
setlocal
set "TARGET=%~dp0reports\%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%"
if not exist "%TARGET%\" (
echo フォルダを作成します: %TARGET%
mkdir "%TARGET%"
if errorlevel 1 (
echo [ERROR] フォルダ作成に失敗しました
pause
exit /b 1
)
)
echo フォルダを開きます: %TARGET%
start "" "%TARGET%"
endlocal
よくある落とし穴5選
落とし穴1:パスをクォートしていない
スペースや全角文字を含むパスはダブルクォートで囲まないとエラーになります。
:: NG: スペースを含むパスは失敗する start "" C:\Users\山田 太郎\Documents :: OK: ダブルクォートで囲む start "" "C:\Users\山田 太郎\Documents"
落とし穴2:startの第1引数(タイトル)を省略する
start コマンドは第1引数をウィンドウタイトルとして解釈します。パスを第1引数に書くと誤動作することがあります。
:: NG: タイトルを省略するとパスがウィンドウタイトルになる場合がある start "C:\Work" :: OK: 空文字列のタイトルを明示的に指定 start "" "C:\Work"
落とし穴3:IF EXISTでフォルダ判定が不正確
if exist "パス" はファイルとフォルダを区別しません。フォルダ専用の判定には末尾に \ を付けます。
:: NG: フォルダの存在チェックにバックスラッシュを付けない if exist "C:\Work" echo 存在する :: OK: フォルダはパス末尾に \ を付けてチェック if exist "C:\Work\" echo フォルダが存在する :: ※ バックスラッシュなしだとファイルとフォルダを区別できない
落とし穴4:ネットワークパスの扱い
UNCパス(\\サーバー名\共有名)を扱うときもダブルクォートが必要です。
:: ネットワーク共有フォルダを開く start "" "\\server\share\folder" :: \\(バックスラッシュ2つ)をクォートで囲む set "NET_PATH=\\192.168.1.10\documents" start "" "%NET_PATH%"
落とし穴5:%~dp0の末尾スラッシュの重複
%~dp0 は末尾に \ が付いているため、サブフォルダ連結時に \ を重ねてしまうミスがあります。
:: %~dp0 は末尾に \ が付く(例: C:\Work\) :: そのため、サブフォルダを連結するときは \ を重ねない :: NG: バックスラッシュが重複する start "" "%~dp0\output" :: OK: %~dp0 の末尾 \ を活かす start "" "%~dp0output"
よくある質問(FAQ)
start "" "パス" を使ってください。explorer は特定のオプション(ファイルを選択状態で開く /select など)が必要な場合に使います。start "" "%~dp0" を使います。%~dp0 はバッチファイルのあるフォルダに展開される特殊変数です。if exist "%TARGET%\" start "" "%TARGET%" のように IF EXIST でチェックしてから開きます。存在しない場合は何もしません。start コマンドを複数行に並べるだけで、それぞれ個別のウィンドウが開きます。start は非同期実行のため、次の行をブロックしません。start "" "C:\ユーザー\山田 太郎\ドキュメント" のように書いてください。start コマンドでは直接的には難しいですが、explorer /select,"ファイルパス" を使うとファイルを選択状態でそのフォルダを開くことができます。@echo off :: 処理後に生成したファイルを選択状態で開く set "OUTPUT_FILE=C:\Work\output\result.csv" explorer /select,"%OUTPUT_FILE%"
まとめ
バッチファイルでフォルダを開く方法をまとめます。
| 用途 | コード例 |
|---|---|
| 基本(絶対パス) | start "" "C:\Work" |
| バッチの場所を基準に | start "" "%~dp0output" |
| デスクトップを開く | start "" "%USERPROFILE%\Desktop" |
| 存在チェックしてから開く | if exist "%T%\" start "" "%T%" |
| 複数フォルダを同時に開く | 複数の start を並べる |
| なければ作成して開く | if not exist mkdir + start |
| ファイルを選択状態で開く | explorer /select,"ファイルパス" |
処理完了後の出力フォルダ自動表示や、ランチャー形式での便利ツール作成など、業務自動化の幅が広がります。start コマンドの詳細については「バッチファイルのCALLとSTARTの違い・使い分け」も参考にしてください。
相対パス全般の書き方については「バッチファイルで相対パスを使う方法」も合わせてご覧ください。
