DOSのバッチ構文における%~dp0などの拡張変数について解説します。
時々、%~dp0 を使っている人を見かけます。
~ は拡張子で、相対パスを絶対パスに変換するのと同等です
0は、バッチファイルそのものを表します。
1 はバッチファイルのコマンドラインで受け取った最初の引数、%2 は 2 番目の引数を表し、以下同様です。
%~d0 はバッチプロセスがあるドライブ文字で、d はドライブを表します。
%~p0 は、バッチプロセスがあるディレクトリで、p はパスを表します。
%~dp0 はバッチプロセスがあるディスク文字とパスです
cd %~dp0 はバッチ・プロセスがあるディレクトリです。
詳しい説明は、コマンドコール /?
DOSのバッチ処理で%~dp0はどういう意味ですか?
(注:%0はバッチファイルのファイル名です。)
この文の意味は
カレントディレクトリをバッチ本体のディレクトリに変更する
ちょっと目が回ったでしょ?慌てずに、例を挙げてみましょう。
E:/jb51フォルダーにa.batというバッチがあるとします。
a.batの中身は
cd /d %~dp0
ここで
cd /d %~dp0 は cd /d e:/jb51 を意味します。
0 はバッチそのものを表します e:/jb51/a.bat
~dpは変数展開
dはパーティション番号eへの両展開。
p はパス /jb51 への展開です。
dpはパーティション番号のパスe:/jb51に展開されます。
以下は図です。
変数の構文の詳細を拡張しました。
:: オプションの構文 :
:: ~I - クォート(")を削除し、%I を展開します。
:: %~fI - %I を完全修飾パス名に展開します。
:: %~dI - %I をドライブ文字だけに展開します。
:: %~pI - %I をパスだけに展開します。
:: %~nI - %I をファイル名のみに展開します。
:: %~xI - %I をファイル拡張子のみに展開します。
:: %~sI - 短い名前だけでパスを展開します。
:: %~aI - %I をファイルの属性に展開します。
:: %~tI - %I をファイルの日付/時刻に展開します。
:: %~zI - %I をファイルのサイズに展開します。
:: %~$PATH:I - 環境変数 path にリストされているディレクトリを検索し、%I を展開します。
:: を最初に見つかった完全修飾名に変更します。もし、環境変数名
:: が定義されていないか、ファイルが見つからない場合、このキーの組み合わせは次のように展開されます。
:: 空文字列
:: 修飾語を組み合わせて、複数の結果を得ることができます。
:: %~dpI - %I をドライブ番号とパスだけに展開します。
:: %~nxI - %I をファイル名と拡張子のみに展開します。
:: %~fsI - %I をフルパス名と短い名前だけに展開します。
:: %~dp$PATH:i - 環境変数 path にリストされているディレクトリを検索し、%I を展開します。
:: で、最初に見つかったドライブ番号とパスを指定します。
:: %~ftzaI - %I を DIR と同様の出力行に展開します。
以下はパース例です。
インストール.batファイルがD:³³にある場合。
このファイルは次のように読みます。
@echo off
echo [INFO] This is a demo.
echo [INFO] %~dp0
pause
install.batを実行すると、コマンドラインの出力は次のようになります。
[INFO] This is a demo.
[INFO] D:\jeesite\bin\
名付けて。
文書そのものを表す %0
dはドライブレターを表します
p はパス
拡張オプションもあります。
%~f0 - フルパス + ファイル名
[INFO] D:\jeesite\bin\install.bat
%~n0
- ファイル名(拡張子なし)
[INFO] インストール
%~x0
- ファイル拡張子
[INFO] .bat
%~s0 - 短い名前だけを含むパスを展開します ("s" は Short, 短い)。
%~a0 - %0 をファイルのファイル属性に展開します ("a" は属性、つまりアトリビュートです)。
%~t0 - %0 をファイルの日付/時刻に展開します ("t "時刻)。
%~z0 - %0 をファイルのサイズに展開します (サイズ サイズ)
その他
関連
-
Windowsのクリップボードに文字列や日付を出力するバッチ処理
-
自動コード投入とプロジェクトデプロイメントのためのバッチファイルbatスクリプト
-
指定したディレクトリにある全ファイルの一覧を取得するバッチ処理(bat)です。
-
DOSコマンドラインからbatバッチプログラムを使って空のフォルダーをすべて削除する方法
-
cmd.exe 共通スタートアップ・パラメーター入門
-
指定したフォルダー内のファイルを遅延して削除する方法
-
DOSバッチ処理上級編 第3章 FORコマンドの変数
-
DOSバッチ処理応用チュートリアル 第2章 DOSループ for コマンドの解説
-
重複行のフィルタリングを行うバッチ処理
-
カオスな雨を実現するバッチプロセス(マトリクス効果)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
管理者権限でbatバッチを実行させる方法
-
DOSコマンドラインからHaoZipでファイルを圧縮する方法
-
ビット一括操作デモコード
-
ウィンドウは、git update (git pull) を定期的に実行するタスクスケジュールを設定し、実行中の cmd を非表示にします。
-
1台目のハードディスクの最後のパーティションを決定し、バットコードを入力するバッチ処理
-
batコマンドのバッチプロセスは、32ビットまたは64ビットシステムかどうかを判断するために、さまざまな方法
-
JDKの一括インストール/JREのワンクリックインストールとJava環境変数の自動設定
-
mavenコマンドのBATスクリプトを呼び出して共有する
-
DOSバッチコマンド For loopコマンド詳細説明
-
bat, vbs, js ネイティブミックス (bat は vbs, js コードを実行可能)