バッチファイルを使って特定のタスクを自動化することは、効率を大幅に向上させる手段の一つです。今回は、バッチファイルを使ってファイルの拡張子を取得する方法についてご紹介します。
バッチファイルで拡張子を取得する方法
バッチファイルでは、%~xI 修飾子を使うことで簡単にファイルの拡張子を取得できます。
以下のバッチファイルのコードを使用して、指定したファイルの拡張子を取得することができます。
@echo off
setlocal
rem ファイルパスを指定
set "file=C:\path\to\your\file.txt"
rem ファイルの拡張子を取得
for %%I in ("%file%") do set "extension=%%~xI"
echo ファイルの拡張子は %extension% です。
endlocal
pause
- ファイルパスの指定: set “file=C:\path\to\your\file.txt” の部分で、対象となるファイルのパスを設定します。
- 拡張子の取得: for %%I in (“%file%”) do set “extension=%%~xI” の部分で、for ループを使用してファイルの拡張子を取得します。%%~xI が拡張子を表しています。
- 結果の表示: echo ファイルの拡張子は %extension% です。 で取得した拡張子を表示します。
実行結果
このスクリプトを実行すると、例えば file.txt というファイルの場合、以下のように表示されます。
ファイルの拡張子は .txt です。
よくある質問(FAQ)
Q. FORの変数展開でパスから拡張子だけを取得するにはどうすればよいですか?
A. FOR変数の
%%~xi(%~xI)で拡張子を取得できます(ドット込みで.txt形式)。FORループ外の通常変数には使えないため、FOR %%a IN ("%filepath%") DO SET ext=%%~xaのようにFORを経由します。拡張子のドットを除くには%%~xaを取得後に%ext:~1%でスライスします。Q. 拡張子の大文字・小文字を統一するにはどうすればよいですか?
A. バッチファイルには標準の大文字変換関数はありません。PowerShellを利用します:
for /f %%a in ('powershell -Command "([System.IO.Path]::GetExtension(''%file%'')).ToLower()"') do set ext=%%a。またはif /i "%ext%"==".TXT"のように比較時に/iフラグで大文字小文字を無視する方法もあります。Q. 特定の拡張子のファイルだけを処理するにはどうすればよいですか?
A.
FOR %%f IN (*.txt) DOでカレントディレクトリのtxtファイルをループ処理できます。サブフォルダも含める場合はFOR /R %%f IN (*.txt) DO。複数の拡張子を処理したい場合はFOR /R %%f IN (*.txt *.csv *.log) DOのようにスペース区切りで列挙できます。まとめ
バッチファイルでファイルの拡張子を取得する方法について紹介しました。シンプルなコードでありながら、非常に有用なテクニックです。他のタスクと組み合わせることで、バッチファイルの活用範囲が広がることでしょう。是非、試してみてください。