やりたいこと検索

バッチファイルがある場所のフォルダ名を取得する

 

目次

 

バッチファイルがある場所のフォルダ名を取得する

バッチファイルを作成していると、そのバッチファイルがある場所のフォルダ名が必要になるときがあります。バッチコマンドには、以下のように実行しているバッチファイルの情報が格納されている変数が用意されています。

例えば、

%~d0 -> ドライブ名(例:C:)
%~p0 -> ドライブ以降のフォルダ名(例:\Users\tanaka\Desktop\バッチ\)

などです(※これらの変数については「パス名から自在に文字列を切り取る -やりたいことから検索-」で詳しく説明しています。)。

しかし、「C:\Users\tanaka\Desktop\folder\」という場所にいて、直近のフォルダ名「folder」だけを直接取得するコマンドは存在せず、自分でプログラムを書く必要があります。

以下が直近のフォルダ名「folder」だけを直接取得するバッチファイルです。

「C:\Users\ide\Desktop\バッチ\」という場所でバッチファイルを実行していたとすれば、以下の結果を得ることができます。

バッチファイルがある場所のフォルダ名を取得する ファイルがあるフォルダ名を取得する

変数「drive」には、ドライブ名が格納され、変数「folder1」から「folder6」にはドライブに近い順にフォルダ名が格納されています。

3行目からの「for」では、「echo %~dp0」で出力される文字列「C:\Users\ide\Desktop\バッチ\」を「\」を区切り文字としドライブ名・フォルダ名に分割して、drive,とfolder1からfolder6にそれぞれ代入しています。(※「for」コマンドについては、「for(繰り返し) -コマンド別解説-」で詳しく解説していますのでそちらも参考にして下さい。)

このようにすれば、バッチファイルが今いる場所のフォルダ名を「%folder4%」で取り出すことができます。

なお、上記のプログラムはドライブに近い順に6つのフォルダ名までしか対応していませんが、

とすれば、8つのフォルダまで対応できます。用途によって必要なフォルダ数に対応できるよう編集して下さい。

以下は、10つのフォルダまで対応したバッチファイルを実行した結果です。

バッチファイルがある場所のフォルダ名を取得する 10つのフォルダに対応したフォルダ名を取得するバッチファイルの実行結果

だた、もっといい方法がありそうな気もしますが…

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメント

  1. 匿名 より:

    「folder」を取得するなら、
    現在のフォルダの%CD%の値から、
    一つ上のフォルダの%CD%の値を消せば、
    取得できるのでは?

  2. 匿名 より:

    1つ上のフォルダ名のみ取得したいなら、
    1.現在のパスを取得する。
    2.1つ上のフォルダに移動する。
    3.その場所のパスを取得する。
    4.1で取得したパスから、3で取得したパスを消す。
    で、取得できると思いますよ。

  3. とくめいちゃん より:

    @echo off
    echo %~dp0
    set para=%~dp0
    :loop
    call :GetPathName %para%
    if “%ret2%”==”” (
    goto :loopend
    )
    set para=%ret2%
    goto :loop
    :loopend
    echo %ret1%
    pause
    exit /b

    :GetPathName
    for /f “tokens=1* delims=\” %%i in (“%1”) do (
    set ret1=%%i
    set ret2=%%j
    )
    exit /b

コメントを残す