【Batch】バッチ ~ 基本編 / ファイル・ディレクトリの扱い ~

■ サンプル

https://dk521123.hatenablog.com/entry/2010/11/22/230218

の続き。
今回は、ファイル・ディレクトリの扱う。

目次

【1】指定のパス配下のディレクトリ・ファイルを取得する
【2】指定のパス配下にディレクトリが存在するか
【3】現在のパスを取得する
【4】ファイル名を取得する
【5】自分自身のパスを取得する
【6】存在有無の確認する

【1】指定のパス配下のディレクトリ・ファイルを取得する

構文

for /d %%変数名 in ( フォルダー名や文字列 ) do 実行するコマンド

サンプル

例1:C:\Program Files\Java 配下のディレクトリ・ファイルを出力する

REM C:\Program Files\Java 配下のディレクトリ・ファイルを出力する

@echo off
for /d %%f in ("C:\Program Files\Java\*") do echo Result : %%f

pause
echo on

例2:C:\Program Files\Java 配下で「jdk」で絞り込む

REM C:\Program Files\Java 配下で「jdk」で絞り込む

@echo off

echo JAVA_HOME : %JAVA_HOME%
SET XJC_EXE=%JAVA_HOME%\bin\xjc.exe
if not exist "%XJC_EXE%" (
   REM clear
   SET XJC_EXE=

   REM C:\Program Files\Java 配下で「jdk」で絞り込める
   for /d %%f in ("C:\Program Files\Java\jdk*") do (
      SET XJC_EXE=%%f\bin\xjc.exe
   )
)

echo XJC_EXE : %XJC_EXE%

SET XJC_EXE=
echo Done

pause
echo on

参考資料
http://tounderlinedk.blogspot.jp/2011/03/for-d-for-windowsbatcmd.html

【2】指定のパス配下にディレクトリが存在するか

 * 上記「指定のパス配下のディレクトリ・ファイルを取得する」の応用でできる

サンプル

@echo off
for /d %%f in ("C:\Program Files\Java\*jdk*") do goto EXSITS

echo Not Found JDK
goto END

:EXSITS
echo Found JDK

:END
pause
echo on

【3】現在のパスを取得する

 * 「%~dp0」で取得可能

サンプル

REM バッチのフォルダ配下の全てのフォルダを取得

echo off
FOR /d %%folder IN (%~dp0\*) DO (
REM 処理を書く
)

参考資料
http://www.hm-lab.net/archives/72

【4】ファイル名を取得する

サンプル

REM ディレクトリ内のGIFファイルを変数に設定する

FOR %%B IN (*.gif) DO (
echo %%B
)

 【5】自分自身のパスを取得する

 * 「%0」で取得可能
 * 『%0 :バッチファイル名(フルパス含む)』を表す

サンプル

echo %~dp0
echo %0
pause

【6】存在有無の確認する

構文

if exist 【確認対象】 【存在した場合、実行される処理】
または
if not exist 【確認対象】 【存在しなかった場合、実行される処理】

サンプル

例2:ファイルチェック

if exist test.bat echo test.batが見つかりました 
if not exist test2.bat echo test2.batが見つかりません 
pause

例2:環境変数が設定されているかチェック

 SET JDK_TEMP=%JAVA_HOME%
if not exist "%JDK_TEMP%" (
   REM Use Default JDK
   SET JDK_TEMP=C:\Program Files\Java\jdk1.8.0
)

関連記事

バッチ ~入門編 ~
https://dk521123.hatenablog.com/entry/2010/07/06/223905
バッチ ~ 基本編 / 変数の扱い ~
https://dk521123.hatenablog.com/entry/2010/11/23/165433
バッチ ~ 基本編 / コピー&削除 ~
https://dk521123.hatenablog.com/entry/2010/11/22/230218
バッチ ~ 基本編 / リダイレクション ~
https://dk521123.hatenablog.com/entry/2015/03/16/232627