24
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Windows バッチファイルで格納先フォルダ名を取得

Last updated at Posted at 2018-08-11

改訂

2018-08-13 call文の代わりにfor文の1ライナーで %~ 構文を適用し、実質2行に洗練。

まえがき

Windows バッチファイルってすでに過去の遺物にも思えるが、まだまだ使われてることも多い。でも、ちょっと凝ったことをしようとすると %~dp0 とか書くことになり、手こずったりもする。

■ 課題

%~ 形式の バッチパラメータのオプション構文 はそこそこ揃っているのだが、%~dp0 でバッチファイルの格納先パスは取得できても、格納先フォルダ名を取得する方法は用意されていない。

取得したい情報 構文 値の例
バッチファイルのフルパス %~f0 C:\Users\someone\folder\mybatch.bat
バッチファイルの格納先パス %~dp0 C:\Users\someone\folder|
バッチファイルの格納先フォルダ名 なし folder

そこで、バッチファイル内でバッチファイルの格納先フォルダ名を取得する方法を実装してみた。

■ バッチファイルでの実装

@echo off

rem このバッチファイルが格納されているフォルダ名を取得する方法

setlocal
set THIS_PATH=%~dp0
for %%1 in ("%THIS_PATH:~0,-1%") do set FOLDER_NAME=%%~nx1

rem テストコード

echo.
echo Current directory is "%CD%"
echo Full path is "%~f0"
echo %%~dp0 is "%~dp0"
echo.
echo Folder name is "%FOLDER_NAME%"

説明

  • 上記の例では %FOLDER_NAME% にバッチファイルの格納先フォルダ名がセットされる。
  • ポイントはパス末尾の \ の有無で %~nx1 の結果が変わること。
  • フォルダ名に空白文字やピリオドが含まれている場合にも対応。

改良

  • call文の代わりに、for文を応用した1ライナーで %~ 構文を適用。

■ 参考

24
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?