2013-06-12 31 views
189

まず、私はthis topicを見ましたが、私はそれを理解できませんでした。現在のバッチファイルディレクトリを取得

質問:

次の内容のD:\path\to\file.batでバッチファイルがあります:

echo %cd% 
pause 

出力は次のとおりです。

C:\ 

それはD:\path\to

でなければなりません私は間違って何をしていますか?

+5

質問へのすべての回答、特に受賞者だけでなく、上位の投票者も読んでください。あなたの掲示されたリンクの最高得点の答えがあなたの質問にすでに答えています。 – dbenham

+4

バッチファイル名を入力するときにc:\にいる場合、c:\は%cd%が出力するものです。 – foxidrive

答えて

373

システム読み取り専用変数%CD%は、バッチファイルの場所ではなく、バッチの呼び出し元のパスを保持します。

%0(例:scripts\mybatch.bat)と入力したバッチスクリプト自体の名前を取得できます。 Parameter extensionsをこれに適用すると、%~dp0はバッチスクリプト(例:W:\scripts\)にドライブとパスを返し、%~f0はフルパス名(例:W:\scripts\mybatch.cmd)を返します。あなたはこの構文を使用してバッチスクリプトと同じフォルダに他のファイルを参照することができ

CALL %0\..\SecondBatch.cmd 

これもサブルーチンで使用することができ、Echo %0は、コールラベルを与えますが、echo "%~nx0"が得られますバッチスクリプトのファイル名を指定します。

%0変数が展開されると、結果は引用符で囲まれます。

+1

私は 'D:\ Dir1 \ Dir2 \ stm.sql'に' stm.sql'を実行する必要はありません。 stm.sqlコマンドを実行するには、mysql.exe -u root -p mysql <%cd%\ stm.sql'が必要です。 –

+0

@HamedKamravaは私のSQLバッチ用ですか? '*のようなバッチファイルではありません。バット 'または' * .sh'? – Stoleg

+0

@ Stoleg-実際、 'D:\ Dir1 \ Dir2 \ batchfile.bat'と' D:\ Dir1 \ Dir2 \ stm.sql'には2つのファイルがあります。 batchfile.batの内容は次のとおりです: 'mysql.exe -u root -p mysql

77

非常にシンプル:

setlocal 
cd /d %~dp0 
File.exe 
+5

コードは短いですが、理解するのは簡単ではありません。このFile.exeとは何ですか?現在のディレクトリパスは%〜dp0に保存されていますか? –

+1

@IvailoBardarovここに答えがあります:https://stackoverflow.com/a/18310141/5259296 –

+0

この回答は実際に質問に答えると思います。名声。 – macetw

14

あなたの.batファイル内:

set mypath=%cd% 

あなたは今.batファイルへのファイルパスを参照するために変数%mypath%を使用することができます。パスを確認するには正しいです:たとえば

@echo %mypath% 

、ファイルは以下の内容でDIR.batと呼ばれるディレクトリg:\test\batから

set mypath=%cd% 
@echo %mypath% 
Pause 

実行はDOSコマンドウィンドウにそのパスをエコーし​​ます。

+0

これは最も簡単で簡単な解決策です – Nani