Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

バッチ処理 (Batch Scripts)

バッチでファイルパスやファイル名を取得する方法

投稿日:2020年11月9日 更新日:

<目次>

(1) バッチでファイルパスやファイル名を取得する方法
 (1-1) 構文
 (1-2) コマンドのオプションについて
 (1-3) サンプルプログラム

「for %%f in (“[コマンド]”) do ([中身])」の中身に「%%~nf」のような文言を見たことはありますでしょうか?実はこの文言がファイルパスやファイル名を取得するための記述なのですが、今回はこの「%%~nf」が何者なのか?について簡単に紹介します。

(1) バッチでファイルパスやファイル名を取得する方法

(1-1) 構文

(構文)

for %%f in ("[フォルダパス/ファイルパス]") do (
echo %%~nf
)

 

(補足1)「%%f」について
変数「%%f」について単独の%は消滅するため、%でエスケープをして「%%f」としています。

(補足2)「%%~nf」について
forループ等でファイルパスを扱う場合に、フルパスではなく「ファイル名のみ」を取得したいケースに「%%~nf」を使います。
(例)
フルパス「C:\Temp\20201231\aaa.sql」の中からファイル名「aaa.sql」のみを抽出したいケースや、あるいは拡張子を取り除いて「aaa」のみを抽出したいケースなど。

目次にもどる

(1-2) コマンドのオプションについて

上記の構文で紹介している「%%~nf」は一般化すると次のようになります。

%[変数] + ~[オプション] = %~[オプション][変数]

rem (例)
%f + ~n = %~nf

つまり変数「%f」にファイル名のみを取得するためのオプションを足すと「%~nf」になるという形です。

そしてオプションの部分に関してはいくつかパターンがあり、「ファイル名のみを出したい」とか「拡張子は表示したくない」といった様々な要望に合わせて調節できるようになっています。

(オプション) (説明)
%~n[変数] %[変数]から「ファイル名」を抽出(拡張子なし)
%~x[変数] %[変数]からファイル名の「拡張子」を抽出
%~nx[変数] %[変数]から「ファイル名」を出力(拡張子あり)
%~d[変数] %[変数]からドライブレター(例「C:」)のみを抽出
%~p[変数] %[変数]からドライブレター(例「C:」)を除いたパスを抽出
%~dp[変数] %[変数]からドライブレターを含むフルパスを出力
%~t[変数] %[変数]からファイルのタイムスタンプを出力
%~z[変数] %[変数]からファイルのサイズ(単位:byte)を出力

上記のオプションについて、実際の値でのINPUT/OUTPUTの例を以下に示します。
(表)

(オプション) (入力=INPUT) (出力=OUTPUT)
%~n[変数] C:\Temp2\SQL\ccc.txt ccc
%~x[変数] .txt
%~nx[変数] ccc.txt
%~d[変数] C:
%~p[変数] \Temp2\SQL\
%~dp[変数] C:\Temp2\SQL\
%~t[変数] 2020/10/29  12:42:00
%~z[変数] 2020/10/29  12:45:00

目次にもどる

(1-3) サンプルプログラム

上記のオプションを一通り試すサンプルプログラムをご紹介します。

(サンプルプログラム)

@echo off

set TEST_FOLDER=C:\Temp2\SQL\*.txt

rem フォルダ(今回の場合はフォルダ配下の拡張子「.txt」のファイル)が存在するかチェック
if exist "%TEST_FOLDER%" (
	rem もしフォルダ配下のファイルが存在するなら、そのファイル数だけループ
	for %%f in ("%TEST_FOLDER%") do (
		rem テスト01:フルパスをそのまま出力
		echo Test01 %%f
		
		rem テスト02:「~n」を使って、ファイル名のみを出力(拡張子なし)
		echo Test02 %%~nf
		
		rem テスト03:「~nx」を使って、ファイル名のみを出力(拡張子あり)
		echo Test03 %%~nxf
		
		rem テスト04:「~d」を使って、ドライブレターのみを出力
		echo Test04 %%~df
		
		rem テスト05:「~dp」を使って、ファイルパス(ファイル名は除く)を出力
		echo Test05 %%~dpf
		
		rem テスト06:「~tf」を使って、ファイルのタイムスタンプを出力
		echo Test06 %%~tf
		
		rem テスト07:「~zf」を使って、ファイルの容量(単位:byte)を出力
		echo Test07 %%~zf byte
	)
)

(補足)

(補足事項) (補足説明)
if exist “%TEST_FOLDER%”  「%TEST_FOLDER%」のみですと、半角スペース等が入った時に正常動作しなくなるため、ダブルクォーテーション「”」で囲っています。
for %%f in (“%TEST_FOLDER%”) forループ変数「%f」について、単独の%は消滅するため「%」でエスケープをしているため「%%f」となっています。

(図131)サンプルプログラム実行結果

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-バッチ処理 (Batch Scripts)

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について

<目次> (1) バッチ処理のパイプ「| の使い方が誤っています。」エラーの原因と対処について  (1-1) エラー概要  (1-2) エラー原因  (1-3) エラー対処 (1) バッチ処理のパイプ …

Windowsのバッチで日付(yyyymmdd形式)や時刻(hhmmss形式)を取得する方法

<目次> (1) Windowsのバッチで日付(yyyymmdd形式)や時刻(hhmmss形式)を取得する方法  (1-1) バッチで日付を取得する  (1-2) バッチで日付を取得する(yyyymm …

バッチファイルでSQLServerに接続する方法~sqlcmdの各オプション挙動を実例で紹介~

<目次> (1) バッチファイルでSQLServerに接続する方法  (1-1) 構文  (1-2) オプションの説明  (1-3) 各オプションの挙動をサンプルで確認 (1) バッチファイルでSQL …

バッチで見る「2>&1」の意味とリダイレクトの種類について

<目次> (1) バッチで見る「2>&1」の意味とリダイレクトの種類について  (1-1) 「2>&1」の意味  (1-2) 「2>&1」の各文字の意味  ( …

バッチでログファイルを出力+ファイル名に日時間を付与する

<目次> (1) バッチでログファイルを出力+ファイル名に日時間を付与する  (1-1) 構文  (1-2) サンプルプログラム  (1-3) 簡単な操作手順動画 (1) バッチでログファイルを出力+ …

  • English (United States)
  • 日本語
Top