DOSバッチ処理における%cd%と%~dp0の違いを詳しく解説
%cd% と %~dp0 はどちらも Windows でのバッチ処理で現在のディレクトリを表すために使用できますが、それらの機能は使用シナリオによって異なります。次の記事では、DOS バッチ処理における %cd% と %~dp0 の違いについて詳しく説明します。必要な方は参照してください。
問題の説明
バッチ処理 a.bat でバッチ処理 b.bat
を呼び出して実行したいとします。b.bat
は を知る必要があります。 >b .bat
の現在の場所を確認し、次のように run.exe
を実行します: b.bat
,b.bat
需要知道b.bat
的当前位置,并执行run.exe
,如下:
// directory structure // c: // -a.bat // -program // -b.bat // -run.exe // a.bat call "%cd%\program\b.bat" // b.bat "%cd%\run.exe"
那么现在能不能成功执行run.exe
呢?
问题分析
%cd%
和%~dp0
都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同:
%cd%
代表的是当前工作目录(current working directory,variable);%~dp0
代表的是当前批处理文件所在完整目录(the batch file's directory,fixed)。
我们来看看下面的例子:
// directory structure // c: // -c.bat // -program // -d.bat // c.bat call "%cd%\program\d.bat" // d.bat @echo off echo cd = %cd% echo dp0 = %~dp0
直接运行d.bat
,结果为
cd = C:\program dp0 = C:\program\
直接运行c.bat
,结果为
cd = C:\ dp0 = C:\program\
从上面的结果可以看出:
执行
d.bat
时,当前工作目录为d.bat
所在目录;执行
c.bat
时,当前工作目录为c.bat
所在目录,即使在调用d.bat
后,该工作目录依旧是c.bat
所在目录。
问题解决
让我们再来看看问题描述中提及的问题——能不能成功执行run.exe
呢?
答案是:不能。“ %cd%run.exe
”表示的是“ C:run.exe
”,并非“ C:programrun.exe
”。那么如何更改呢?
有两种方案:
// plan A // change the current working directory // a.bat cd "%~dp0" call "%cd%\program\b.bat" // b.bat cd "%~dp0" "%cd%\run.exe" // plan B // using %~dp0 directly // a.bat call "%~dp0program\b.bat" // b.bat "%~dp0run.exe"
问题延伸
上面的解决方案中plan A通过更改当前目录来解决该问题,可以这里面也存在另外一个问题,让我们看下面的例子:
// directory structure // c: // -program // -f.bat // d: // -e.bat // plan A // change the current working directory // e.bat cd "%~dp0" call "c:\program\f.bat" // f.bat cd "%~dp0" "%cd%\run.exe"
现在e.bat
和f.bat
不在同一个盘符了,从e.bat
切换当前工作目录到f.bat
直接使用cd是不行的,必须要使用:
cd /d "%~dp0"
这个地方容易疏忽,切记不要犯错。
问题总结
我们来重申下%~dp0
和%cd%
的区别, %cd%
和%~dp0
都能用来表示当前目录,但是他们在不同的使用场景下,功能却不相同:
%cd%
代表的是当前工作目录(current working directory,variable);%~dp0
代表的是当前批处理文件所在完整目录(the batch file's directory,fixed)。
从目前我们的使用情况来看,尽量使用%~dp0
,不建议使用%cd%
%cd%
と %~dp0
はどちらも現在のディレクトリを表すために使用できますが、それらの機能は使用シナリオによって異なります。同じ: 🎜- 🎜
%cd%
は現在の作業ディレクトリ (変数) を表します。 🎜 - 🎜
%~dp0
は、現在のバッチ ファイルが配置されている完全なディレクトリを表します (バッチ ファイルのディレクトリ、固定)。 🎜🎜
🎜rrreee🎜🎜🎜 d.bat
を直接実行すると、結果は次のようになります。 🎜🎜rrreee🎜🎜🎜 c.bat
を直接実行すると、結果は次のようになります 🎜
🎜rrreee🎜🎜🎜 からわかるように、上記の結果: 🎜
- 🎜
d.bat
を実行すると、現在の作業ディレクトリはd.bat
が保存されているディレクトリになります。 code> が配置されています。 🎜 - 🎜
c.bat
を実行すると、実行後も現在の作業ディレクトリはc.bat
が配置されているディレクトリになります。d.bat
を呼び出しても、作業ディレクトリはc.bat
が配置されているディレクトリのままです。 🎜
run.exe
は正常に実行できますか? 🎜🎜答えは「いいえ」です。 「%cd%run.exe
」は「C:programrun.exe
」ではなく「C:run.exe
」を意味します。では、どうやって変更すればよいのでしょうか? 🎜🎜解決策は 2 つあります: 🎜🎜rrreee🎜🎜🎜🎜問題の拡張🎜🎜🎜🎜 上記の解決策では、プラン A は現在のディレクトリを変更することで問題を解決しますが、その他の解決策もあります。その他の解決策はこちら 質問です。次の例を見てみましょう: 🎜
🎜rrreee🎜🎜🎜今、e.bat
と f.bat
は次のようになります。同じディスク上にありません。cd を直接使用して現在の作業ディレクトリを e.bat
から f.bat
に切り替えることはできません。 🎜
🎜 rrreee🎜🎜🎜ここは見落としやすい場所ですので、間違えないように注意してください。 🎜🎜🎜問題の概要🎜🎜🎜🎜%~dp0
と %cd%
、 %cd%
と %~dp0 はどちらも現在のディレクトリを表すために使用できますが、その機能は使用シナリオによって異なります: 🎜
- 🎜
% cd%
は現在の作業ディレクトリ (変数) を表します。 🎜 - 🎜
%~dp0
は、現在のバッチ ファイルが配置されている完全なディレクトリ (バッチ ファイルのディレクトリ) を表します。 、 修理済み)。 🎜
%~dp0
を使用するようにしてください。そうでない限り、%cd%
を使用することはお勧めできません。その他のニーズもございます。 🎜🎜DOS バッチ処理における %cd% と %~dp0 の違いの詳細な説明については、PHP 中国語 Web サイトに注目してください。 🎜

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法
