Windowsのコマンドプロンプトは、システム管理や開発の場面で頻繁に使用される便利なツールです。本記事では、コマンドプロンプトを使って特定のファイルやフォルダのフルパスを取得する方法を詳しく説明します。初めての方にもわかりやすいように、基本操作から応用例までカバーします。
対象:以下はWindowsのコマンドプロンプト(cmd.exe)用です。PowerShellにはそのまま貼り付けないでください。通常のファイルを参照するだけなら管理者として開く必要はありません。対話入力では%I、バッチでは%%Iを使い、変数名の大文字・小文字もそろえます。コマンド拡張は有効、遅延環境変数展開は無効の状態を前提とします。
フルパスへの変換と検索は別です。%~fIは指定した名前を完全修飾パスに展開します。ワイルドカードを使わず名前を直接指定した場合、存在しない名前でもパスが表示され得ます。表示だけで実在や読み取り権限が確認できたと判断しないでください。また、相対パスの基準は実行時のカレントディレクトリです。C:folderとC:\folderも同じ意味ではありません。
コマンドプロンプトの基本操作
Windowsのコマンドプロンプトは、さまざまなシステムタスクを実行するための強力なツールです。以下に、基本的な使い方と開き方を説明します。
コマンドプロンプトを開く方法
コマンドプロンプトを開くには、次の手順に従います:
- スタートメニューを開き、「cmd」と入力します。
- 「コマンドプロンプト」アプリをクリックして起動します。
基本的なコマンドの使い方
コマンドプロンプトでよく使われる基本コマンドをいくつか紹介します:
dir
現在のディレクトリ内のファイルとフォルダの一覧を表示します。
dircd
ディレクトリを変更します。
cd /d "フォルダ名"cls
コマンドプロンプトの画面をクリアします。
clsこれらの基本コマンドを使いこなすことで、コマンドプロンプトでの作業がスムーズに進みます。
ファイルのフルパス取得方法
コマンドプロンプトを使って特定のファイルのフルパスを取得する方法を説明します。これは、スクリプト作成やシステム管理の際に非常に便利です。
フルパスの取得コマンド
特定のファイルのフルパスを取得するための最も簡単な方法は、forコマンドを使用することです。以下にその具体的なコマンドを示します:
for %I in ("ファイル名") do @echo "%~fI"例
たとえば、example.txtというファイルのフルパスを取得したい場合は、次のように入力します:
for %I in ("example.txt") do @echo "%~fI"カレントディレクトリがC:\Workなら、"C:\Work\example.txt"のように表示します。二重引用符は、空白や&などを含むパスを1つの値として扱うため、入力側と出力側の両方に付けています。
存在する項目だけを表示したいときは、次のようにif existを加えます。これは存在確認であり、ファイルを開けることや、その項目が通常のファイルであることまで保証するものではありません。
for %I in ("example.txt") do @if exist "%~fI" echo "%~fI"名前に空白がある場合もfor %I in ("report 2026.txt") do @echo "%~fI"のように囲みます。この展開はリンク先の実体を特定したり、PC内の別の場所を検索したりする機能ではありません。
複数のファイルのフルパスを取得
サブディレクトリも含めてワイルドカードに一致するファイルを列挙するには、for /rを使います。次の例にdirは使っていません:
for /r %I in (*.txt) do @echo "%~fI"このコマンドは、現在のディレクトリを起点にサブディレクトリへ進み、*.txtに一致するファイルを列挙します。列挙はアクセスできる範囲が対象であり、厳密な拡張子判定や隠し・システム項目を含む完全な監査一覧が必要な用途とは区別してください。
属性を明示して一覧を得るなら、次のdirも使えます。/a:-dはディレクトリを除外し、隠し・システムファイルも対象にします。/sは再帰、/bは簡潔な出力です。対象フォルダが存在し、一覧を読めることを先に確認してください。
dir /a:-d /s /b "C:\Work\*"このdirの出力は引用符なしのパスです。他のコマンドに渡す際は改めて引用符で囲みます。アクセス拒否などのエラーを無視せず、出力ファイルを作る場合は列挙対象のフォルダの外に保存してください。
バッチファイルでの利用
上記のコマンドをバッチファイルに組み込むことで、自動化することも可能です。次のようなバッチファイルを作成します:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for %%I in ("example.txt") do echo "%%~fI"
endlocal
pauseこの例も、実行時のカレントディレクトリを基準にexample.txtのパスを表示します。バッチファイルの保存先を基準にするなら、"%~dp0example.txt"を指定します。パスを表示するだけでは存在確認にはなりません。
フォルダのフルパス取得方法
特定のフォルダのフルパスを取得する方法を説明します。ファイルと同様に、フォルダのフルパスもコマンドプロンプトを使って簡単に取得できます。
フォルダのフルパスを取得する基本コマンド
現在のフォルダは引数なしのcdで表示できます。指定フォルダへ移動してから表示する場合は、次のように/dでドライブも切り替え、&&で移動成功時だけ表示します:
cd /d "フォルダ名" && cd例
例えば、Documentsフォルダのフルパスを取得したい場合は、以下のように入力します:
cd /d "Documents" && cdこの例のDocumentsはカレントディレクトリ直下のフォルダです。Windowsの「ドキュメント」フォルダが常にこの相対位置にあるとは限りません。目的の場所に置き換え、移動が成功したときだけ現在のパスを表示します。単独の次の入力としてecho "%CD%"を実行しても現在位置を表示できますが、cd ... & echo %CD%のように同じ行や括弧ブロックにまとめると、移動前の値が展開されることがあります。
特定のフォルダのフルパスを直接取得する
forコマンドを使って特定のフォルダのフルパスを直接取得する方法もあります:
for %I in ("フォルダ名") do @echo "%~fI"例
例えば、MyFolderというフォルダのフルパスを取得したい場合は、以下のように入力します:
for %I in ("MyFolder") do @echo "%~fI"このコマンドはMyFolderをカレントディレクトリ基準のフルパスに展開します。フォルダの検索・存在確認は行いません。存在するフォルダに実際に移動して確認したい場合は、前のcd /d "MyFolder" && cdの方法を使います。
複数のフォルダのフルパスを取得
複数のフォルダのフルパスを一度に取得する場合、次のようなコマンドを使用します:
for /d %I in (*) do @echo "%~fI"/dはワイルドカードに一致するディレクトリを対象にします。この例は直下のフォルダの列挙であり、その下の階層までは再帰しません。
バッチファイルでの利用
上記のコマンドをバッチファイルに組み込むことで、自動化することも可能です。次のようなバッチファイルを作成します:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /d %%I in (*) do echo "%%~fI"
endlocal
pauseこのバッチファイルは、カレントディレクトリ直下で列挙されたフォルダのフルパスを表示します。
応用例:バッチファイルでの自動取得
コマンドプロンプトでの操作を自動化するために、バッチファイルを使ってファイルやフォルダのフルパスを自動取得する方法を紹介します。バッチファイルを使用すると、繰り返し作業を効率化できます。
バッチファイルの基本構造
バッチファイルは複数のコマンドを順に実行するテキストファイルで、拡張子は.batまたは.cmdです。最初は開いているコマンドプロンプトから実行し、エラーを確認してください。setlocal EnableExtensions DisableDelayedExpansionで設定と変数の影響をバッチ内に限定し、名前に含まれる!の遅延展開を避けます。パスをバッチのコードへ直接書く場合、文字としての%は%%にする必要があります。以下は管理者権限や長いパス・特殊なデバイス名への万能な対処を行うコードではありません。
単一ファイルのフルパス自動取得
特定のファイルのフルパスを自動で取得するバッチファイルの例を示します:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "filename=%~dp0example.txt"
if not exist "%filename%" (
echo File not found.
exit /b 1
)
for %%I in ("%filename%") do echo "%%~fI"
endlocal
pauseこの例は%~dp0でバッチファイルの保存先を基準にし、同じフォルダのexample.txtが存在する場合にパスを表示します。名前が存在しない場合は終了コード1で終了します。
特定のフォルダ直下のファイルのフルパス自動取得
次に、指定フォルダ直下のファイルを列挙する例です。folderpathを実在するフォルダに置き換えます。pushdで移動できなければ停止するため、失敗したまま別のフォルダを列挙しません:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "folderpath=C:\path\to\your\folder"
pushd "%folderpath%" || exit /b 1
for %%I in (*) do echo "%%~fI"
popd
endlocal
pause指定フォルダ直下で列挙されたファイルのパスを表示し、popdで元の位置へ戻ります。サブフォルダの中は対象外です。隠し・システムファイルを含む一覧が必要なら、前述のdir /a:-d /s /bとの範囲の違いを確認してください。
特定のフォルダ直下のサブフォルダのフルパス自動取得
同じ仕組みで、for /dを使うと直下のサブフォルダを列挙できます:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "folderpath=C:\path\to\your\folder"
pushd "%folderpath%" || exit /b 1
for /d %%I in (*) do echo "%%~fI"
popd
endlocal
pause指定フォルダの直下で列挙されたサブフォルダのパスを表示し、元の位置へ戻ります。pushdはコマンド拡張が有効ならUNCパスにも対応しますが、一時的なドライブ文字を割り当てるため、出力が元のUNC表記になるとは限りません。
まとめ
バッチファイルを使用することで、コマンドプロンプトでの反復作業を自動化し、効率的にフルパスを取得することができます。これらの応用例を参考に、自分のニーズに合わせたバッチファイルを作成してみてください。
実践演習:特定のフォルダ内のファイルリスト取得
ここでは、特定のフォルダ直下の練習用ファイルのフルパスを取得する実践演習を行います。この手順に従って実際に操作してみましょう。
演習環境の準備
まず、演習用のフォルダを準備します。例えば、%USERPROFILE%\TestFolderというフォルダを作成し、その中にいくつかのファイルを配置します。
フォルダとファイルの作成
Windowsエクスプローラーを使って以下の手順でフォルダとファイルを作成します:
- エクスプローラーのアドレスバーに
%USERPROFILE%を入力して開き、その下にTestFolderというフォルダを作成します。 TestFolder内に、file1.txt、file2.txt、file3.txtといったテキストファイルをいくつか作成します。
コマンドプロンプトでファイルリストを取得
コマンドプロンプトを開き、次の手順で%USERPROFILE%\TestFolder内のファイルのフルパスを取得します:
- コマンドプロンプトを開きます。
%USERPROFILE%\TestFolderに移動します:cd /d "%USERPROFILE%\TestFolder"- 移動が成功したことを確認してから、次のコマンドで直下の練習用ファイルのパスを表示します:
for %I in (*) do @echo "%~fI"
出力例(説明用)
ユーザープロファイルがC:\Users\Userで、作成した3ファイルだけが対象なら、次のような出力になります。これは説明用の例であり、実機で採取した実行ログではありません。表示順は保証しません:
"C:\Users\User\TestFolder\file1.txt"
"C:\Users\User\TestFolder\file2.txt"
"C:\Users\User\TestFolder\file3.txt"バッチファイルで自動化
上記の手順をバッチファイルにまとめると、毎回コマンドを入力する手間が省けます。以下のバッチファイルを作成します:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
pushd "%USERPROFILE%\TestFolder" || exit /b 1
for %%I in (*) do echo "%%~fI"
popd
endlocal
pauseこのバッチは%USERPROFILE%\TestFolderの直下にある練習用ファイルを列挙します。バッチ自体をそのフォルダに置くとバッチも対象になるので、外側に保存してください。
まとめ
この演習を通して、特定のフォルダ内にあるファイルのフルパスを取得する方法を学びました。バッチファイルを使うことで、さらに効率的に作業を進めることができます。これを応用して、自分の環境に合わせた自動化スクリプトを作成してみましょう。
トラブルシューティング
コマンドプロンプトでファイルやフォルダのフルパスを取得する際に、いくつかの問題に遭遇することがあります。ここでは、一般的な問題とその解決策を説明します。
問題1:ファイルやフォルダが見つからない
コマンドプロンプトでファイルやフォルダが見つからない場合、以下の原因と対策が考えられます。
原因
- ファイルやフォルダの名前が間違っている
- 指定したパスが間違っている
- ファイルやフォルダが存在しない
対策
- ファイルやフォルダの名前を正確に確認する
- 正しいパスを指定する
%~fIの出力だけで判断せず、if existやdir、エクスプローラーで対象の存在と種類を確認する
問題2:アクセス権限が不足している
特定のフォルダやファイルに対するアクセス権限が不足している場合、エラーメッセージが表示されることがあります。
原因
- ユーザーアカウントに必要な権限がない
- ファイルやフォルダがシステム保護されている
対策
- 通常のユーザー権限で参照できる場所を使い、アクセスが拒否された対象と理由を確認する
- 許可された管理作業でのみ必要な権限を確認する。パスを表示するためだけにACLや所有権を変更しない
問題3:特定のコマンドが動作しない
使用しているコマンドが正しく機能しない場合、以下の原因と対策が考えられます。
原因
- コマンドのシンタックスエラー
- 環境変数の設定ミス
- コマンドが存在しない
対策
- コマンドのシンタックスを再確認する
- 必要な環境変数が正しく設定されているか確認する
- 使用しているOSでそのコマンドがサポートされているか確認する
問題4:バッチファイルが正しく動作しない
バッチファイルが期待通りに動作しない場合の原因と対策を説明します。
原因
- スクリプト内のコマンドにエラーがある
- ファイルパスや変数の設定が間違っている
- 権限の問題
対策
- 開いたコマンドプロンプトから実行してエラーを読み、必要なら
@echo offを外して処理箇所を確認する。対話入力へ移す場合は%%Iを%Iにする - ファイルパスや変数の設定を再確認する
- 管理者実行を万能な解決策にせず、引用符、
%Iと%%Iの違い、移動失敗時の停止を確認する
まとめ
トラブルシューティングは、問題の原因を特定し、適切な対策を講じることが重要です。ここで紹介した一般的な問題と解決策を参考にして、効率的に作業を進めましょう。
応用例:他のツールとの連携
コマンドプロンプトで取得したファイルやフォルダのフルパスを他のツールやスクリプトと連携することで、さまざまな作業を自動化できます。ここでは、その応用例を紹介します。
例:ファイルのコピー
取得したファイルのフルパスを使って、ファイルを別の場所にコピーするバッチファイルを作成します。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "source=C:\source\file.txt"
set "destination=D:\backup"
if not exist "%source%" exit /b 1
if not exist "%destination%\" exit /b 1
copy /-y "%source%" "%destination%\"
if errorlevel 1 exit /b 1
endlocal既存の保存先フォルダD:\backupへコピーします。/-yで同名ファイルを上書きする前に確認します。これはパスの表示と異なりファイルを作成・変更する操作です。コピー元、保存先、エラー表示を確認してください。
例:ファイルの圧縮
取得したファイルのフルパスを使って、ファイルを圧縮するバッチファイルを作成します。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "source=C:\source\file.txt"
set "archive=C:\backup\backup.zip"
powershell.exe -NoProfile -Command "try { Compress-Archive -LiteralPath $env:source -DestinationPath $env:archive -ErrorAction Stop } catch { Write-Error $_; exit 1 }"
if errorlevel 1 exit /b 1
endlocalWindows PowerShellのCompress-Archiveを呼び出してZIPを作成する例です。保存先の親フォルダを用意し、既存のZIPは上書きしない前提です。-LiteralPathで名前をワイルドカードとして解釈させず、パスは環境変数から渡します。公式資料では1ファイルあたり2GBの制限と隠しファイル・フォルダの除外が説明されているため、完全バックアップ用の方法とはみなさないでください。
例:ファイルのアップロード
アップロードも実際のファイル送信です。通常のFTPでは認証情報が平文で送られるため、パスワードをftp.txtに書き出す方式は使いません。次はOpenSSHクライアントのscpを使う例です。クライアントが利用可能で、接続先が対応するSSH転送を提供し、アカウントと保存先への権限があることが前提です。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
set "source=C:\source\file.txt"
if not exist "%source%" exit /b 1
scp "%source%" "[email protected]:/upload/"
if errorlevel 1 exit /b 1
endlocal[email protected]:/upload/はUnix形式の保存先パスを提供するサーバー向けのプレースホルダーです。実際のアカウント、ホスト、書き込み可能なディレクトリに置き換え、同名ファイルの上書き影響も確認してから実行してください。初回接続時のホスト鍵は管理者などの信頼できる別経路で照合し、警告を無条件に承認しないでください。パスワードをバッチへ保存せず、必要に応じて対話入力します。これは接続や転送の成功を確認済みとする例ではありません。
まとめ
コマンドプロンプトでの作業を自動化するために、他のツールやスクリプトとの連携が有効です。ファイルの操作やデータの移動など、さまざまな処理を組み合わせて効率的に作業を進めましょう。
Microsoftの参考資料
以下の公式資料を基に構文と条件を確認しています。ここに示すWindowsコマンドの実機実行、コピー、圧縮、外部サーバーへの送信は、この確認では行っていません。



コメント