batファイルで「dp0」の意味と使い方を、現役エンジニアの筆者が教えます!
![](https://sugublog.org/wp-content/uploads/2021/02/cropped-dog003-150x150.png)
batでdp0とよくわからない記号が出てきましたがどのように使用するのかわかりません?
batファイルでは便利な機能などもあります。今回の「dp0」もそのうちの一つです。
今回はこのdp0を使用してbatファイルを動かして、中身を理解しましょう!
windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。
batでdp0の使い方!
![PC](https://sugublog.org/wp-content/uploads/2021/07/PC007-9-1024x717.jpg)
![PC](https://sugublog.org/wp-content/uploads/2021/07/PC007-9-1024x717.jpg)
ではdp0の使い方を見ていきます。まずは使用方法はbatファイルを作成して以下のコードを記述します。
@echo off
echo %~dp0
pause
dp0は簡単に言うと、batファイルのある絶対パスを入れている変数のようなものです。※batファイル名は省きます。
%~を前につければ展開出来ます。
このbatファイルを「C:\script\bat\」配下において実行してみます。
![](https://sugublog.org/wp-content/uploads/2021/07/analytics-2-300x157.jpg)
![](https://sugublog.org/wp-content/uploads/2021/07/analytics-2-300x157.jpg)
C:\script\bat\
batファイル名を省いた絶対パスを取り出す事が出来ます。
batファイル名を除いた絶対パス以外を取得する
batファイルでdp0はbatファイル名を除いた絶対パス以外を取得できました。
オプション | 意味 |
---|---|
%~d0 | バッチファイルのドライブ名 |
%~p0 | バッチファイルのパス |
%~dp0 | バッチファイルのドライブ名+パス |
%~f0 | バッチファイル名を含めたパス |
%~n0 | バッチファイル名 |
%~x0 | バッチファイルの識別子 |
%~nx0 | バッチファイル名(識別子含む) |
%~s0 | バッチファイル名を含めたパス(省略形) |
%~a0 | バッチファイルの属性 |
%~t0 | バッチファイルの更新日時 |
%~z0 | バッチファイルの容量(バイト) |
実践:batでdp0を使用したコード
![training](https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-1-1024x683.jpg)
![training](https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-1-1024x683.jpg)
では実際に業務でも使用できるdp0を使用したコード例をみていきます。
以下のbatファイルを作成してください。
@echo off
set file=%~dp0test.txt
if exist %file% (
echo fileは既に%~dp0にあります!
) else (
echo fileはないので作成します!
echo > %file%
)
pause
batでdp0を使用したファイルの説明
このコードの概要をざっくりいうと、batファイルのあるフォルダに「test.txt」のファイルが存在するかを判断し、その結果で処理を分けています。
setで存在して欲しい絶対パスを含めたファイル名を「file」変数に格納しています。
![](https://sugublog.org/wp-content/uploads/2021/08/script_0809-11-300x195.jpg)
![](https://sugublog.org/wp-content/uploads/2021/08/script_0809-11-300x195.jpg)
その変数と「exist」を使用してファイルの存在を確認しています。ファイルの存在を確認する方法の詳細は以下の記事参照
![](https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9-300x125.jpg)
![](https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9-300x125.jpg)
ファイルの存在の有無で処理をif文で分けています。batでのif文の詳細は以下の記事参照!
![](https://sugublog.org/wp-content/uploads/2021/06/PC223-min-scaled.jpg)
![](https://sugublog.org/wp-content/uploads/2021/06/PC223-min-scaled.jpg)
「test.txt」のファイルが存在すれば、その絶対パスにファイルがある事を表示しています。
存在しなければ、絶対パスを含めたファイル名を使用してファイルを作成しています。
![](https://sugublog.org/wp-content/uploads/2021/08/DB0804-3-300x210.jpg)
![](https://sugublog.org/wp-content/uploads/2021/08/DB0804-3-300x210.jpg)
batでdp0を使用したファイルを実行してみる
ファイルがない状態でこのbatファイルを実行してみます。
fileはないので作成します!
上記表示されてdp0のパスに「test.txt」ファイルが作成されていると思います。
もう一度このbatファイルを実行します!
fileは既にC:\script\bat_dp0\にあります!
今度はファイルが存在しているので、dp0の絶対パスにファイルがあることが表示されました!
batファイルで日本語が文字化けする場合
![エラー](https://sugublog.org/wp-content/uploads/2021/06/shutterstock_1433996435-min-1024x683.jpg)
![エラー](https://sugublog.org/wp-content/uploads/2021/06/shutterstock_1433996435-min-1024x683.jpg)
ここで以下の様に日本語が文字化けした場合の解決方法は文字コードを変更することです!
file縺ッ縺ゅj縺セ縺呻シ・
文字コードを変更するやり方はbatファイルを編集します。
![フォルダ開くバッチファイル指定](https://sugublog.org/wp-content/uploads/2021/01/image-209-1024x217.png)
![フォルダ開くバッチファイル指定](https://sugublog.org/wp-content/uploads/2021/01/image-209-1024x217.png)
文字化けしたbatファイルを右クリックして「編集」をクリックします。
![バッチファイルを編集する](https://sugublog.org/wp-content/uploads/2021/01/image-204.png)
![バッチファイルを編集する](https://sugublog.org/wp-content/uploads/2021/01/image-204.png)
batァイルが開くので、「ファイル」から「名前を付けて保存」をクリックします。
![バッチファイルを上書き保存する](https://sugublog.org/wp-content/uploads/2021/01/image-205.png)
![バッチファイルを上書き保存する](https://sugublog.org/wp-content/uploads/2021/01/image-205.png)
文字コードを「ANSI」に変更して「保存」をクリックします。
![バッチファイルをANSIに変更して保存する](https://sugublog.org/wp-content/uploads/2021/01/image-206.png)
![バッチファイルをANSIに変更して保存する](https://sugublog.org/wp-content/uploads/2021/01/image-206.png)
「上書きしますか?」と聞かれるので「はい」をクリックします。
![バッチファイルを上書きする](https://sugublog.org/wp-content/uploads/2021/01/image-208.png)
![バッチファイルを上書きする](https://sugublog.org/wp-content/uploads/2021/01/image-208.png)
batファイルを実行すれば日本語文字化けが解消しています。
![](https://sugublog.org/wp-content/uploads/2021/06/kaizen1-2-min-scaled.jpg)
![](https://sugublog.org/wp-content/uploads/2021/06/kaizen1-2-min-scaled.jpg)