2008-09-21 22 views
260

私は、次の変数を定義するバッチファイルで探しています:%~d0または%~p0が実際に何を意味するWindowsバッチファイルで%〜d0とは何を意味しますか?

set _SCRIPT_DRIVE=%~d0 
set _SCRIPT_PATH=%~p0 
  • 現在のディレクトリ、ドライブ、スクリプトのパラメータなど、よく知られている値がありますか?
  • 他にも同様のショートカットがありますか? hereから

答えて

413

魔法変数%Nはファイルを呼び出すために使用される引数が含まれています%0%1%2はとても上の第二とで、後の最初の引数で、バット・ファイル自体へのパスです。

引数はファイルパスであることが多いため、パスの一部を抽出する構文が追加されています。 ~dはドライブ、~pはパス(ドライブなし)、~nはファイル名です。それらは組み合わせることができるので、~dpはドライブ+パスです。

%~dp0は、バットでは非常に便利です:実行中のbatファイルが存在するフォルダです。

ファイルに関するその他の種類のメタ情報を取得することもできます。~tはタイムスタンプで、~zはサイズです。

すべてのコマンドラインコマンドの参照については、hereを参照してください。チルダ - マジックコードはforの下に記述されています。

+1

「call」コマンドにも記述されています。これは、バッチファイルで動作します。 :) – user314104

+1

も参照してください。http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/percent.mspx?mfr=true –

+5

自己へのメモ: 'echo%〜dp0'はコマンドラインでは動作しません。バッチファイルでのみ動作します。ダー! – northben

7

:スクリプトがある(ドライブなし)

パス:〜P0

スクリプトがあるドライブ:〜D0

5

%~d0はあなたのドライブ文字を与えます引数0(スクリプト名)、%~p0のパス。

117

これらは、拡張された可変置換です。バッチファイルで使用される%N変数を変更します。 Windowsでバッチプログラミングをする場合には非常に便利です。

%~I   - expands %I removing any surrounding quotes ("") 
%~fI  - expands %I to a fully qualified path name 
%~dI  - expands %I to a drive letter only 
%~pI  - expands %I to a path only 
%~nI  - expands %I to a file name only 
%~xI  - expands %I to a file extension only 
%~sI  - expanded path contains short names only 
%~aI  - expands %I to file attributes of file 
%~tI  - expands %I to date/time of file 
%~zI  - expands %I to size of file 
%~$PATH:I - searches the directories listed in the PATH 
       environment variable and expands %I to the 
       fully qualified name of the first one found. 
       If the environment variable name is not 
       defined or the file is not found by the 
       search, then this modifier expands to the 
       empty string 

FOR /?を実行すると上記が見つかります。

34

はい、以下に示す他のショートカットがあります。 コマンドの〜d0は、0番目の引数のドライブ文字を意味します。

~ expands the given variable 
d gets the drive letter only 
0 is the argument you are referencing 

第0引数がスクリプトパスであるため、あなたのパスのドライブ文字を取得します。次のショートカットも使用できます。

%~1   - expands %1 removing any surrounding quotes (") 
%~f1  - expands %1 to a fully qualified path name 
%~d1  - expands %1 to a drive letter only 
%~p1  - expands %1 to a path only 
%~n1  - expands %1 to a file name only 
%~x1  - expands %1 to a file extension only 
%~s1  - expanded path contains short names only 
%~a1  - expands %1 to file attributes 
%~t1  - expands %1 to date/time of file 
%~z1  - expands %1 to size of file 
%~$PATH:1 - searches the directories listed in the PATH 
       environment variable and expands %1 to the fully 
       qualified name of the first one found. If the 
       environment variable name is not defined or the 
       file is not found by the search, then this 
       modifier expands to the empty string  

%~dp1  - expands %1 to a drive letter and path only 
%~nx1  - expands %1 to a file name and extension only 
%~dp$PATH:1 - searches the directories listed in the PATH 
       environment variable for %1 and expands to the 
       drive letter and path of the first one found. 
%~ftza1  - expands %1 to a DIR like output line 

これは、CALL /を実行するとコマンドプロンプトで直接見つけることもできます。またはFOR /?

2

このコードは〜tilda文字の使用方法を説明しています。これは私にとって最も混乱していました。私はこれを理解したら、それは理解して物事がはるかに簡単になります:

@ECHO off 
SET "PATH=%~dp0;%PATH%" 
ECHO %PATH% 
ECHO. 
CALL :testargs "these are days" "when the brave endure" 
GOTO :pauseit 
:testargs 
SET ARGS=%~1;%~2;%1;%2 
ECHO %ARGS% 
ECHO. 
exit /B 0 
:pauseit 
pause 
6

大いに役立つだろうもう一つのヒントは、それが別のドライブ 1に、現在のディレクトリを設定することである第一%~d0を使用する必要があります、 cd %~dp0。これにより、ディレクトリがバッチファイルのドライブに変更され、そのフォルダに変更されます。

#oneLinerLoversについては

cd /d %~dp0は、ドライブとディレクトリの両方を変更します:)

・ホープこれは誰かに役立ちます。

+4

別のオプションは 'pushd%〜dp0'です。これは現在のドライブを変更するのに問題はなく、後で元のドライブ/パスに' popd'できるという追加のボーナスを与えます。 – bcrist

1

に注意するために、いくつかの落とし穴:あなたダブルクリックバッチファイル%0は、引用符で囲まれる場合

。たとえば、あなたがc:\test.batとしてこのファイルを保存する場合:

@echo %0 
@pause 

をダブルクリックすると、出力で新しいコマンドプロンプトを開きます:

"C:\test.bat" 

をしかし、あなたは最初のコマンド・プロンプトを開いて、それを直接呼び出す場合そのコマンドプロンプトから、と入力したものは、%0になります。あなたはtest.batを入力してください入力した場合、あなたが何の引用符を入力しないので、%0の出力には引用符を持っていません。

c:\>test.bat 
test.bat 

あなたはtestを入力してください入力した場合、あなたが入力したので、%0の出力は、あまりにも何の拡張子を持っていません拡張子:tEsTため

c:\>test 
test 

同じことがを入力します:

あなたは "test" を入力してください入力した場合
c:\>tEsT 
tEsT 

%0の出力は引用符(あなたがそれらを入力したため)が、拡張子なしがあります:あなたは"C:\test.bat"を入力した場合

c:\>"test" 
"test" 

最後に、出力が正確だろうているかのようにあなたはそれをダブルクリックした:

c:\>"C:\test.bat" 
"C:\test.bat" 

注これらはすべての可能な値ではないことをあなたが他のフォルダからスクリプトを呼び出すことができますので、3210が使用できます

c:\some_folder>/../teST.bAt 
/../teST.bAt 

%~0の出力は、単に%0マイナス引用符(もしあれば)の出力であるため、上記に示したすべての例でも、%~0に影響を与えます。

0

現在のファイルまたはディレクトリの現在の場所を表示します。バッチファイルがデスクトップディレクトリにある場合、 "%〜dp0"はデスクトップディレクトリを表示します。現在のファイル名で現在のディレクトリを表示する場合は、 "%〜dp0%〜n0%〜x0"と入力します。

+0

"%〜dpnx0"が良いでしょう – FrinkTheBrave

関連する問題