私は%~dp0
非常に便利で、バッチファイルの移植性を高めるために多く使用しています。
しかし、ラベル自体は私には非常に謎めいているようです...何をし~
ていますか?いdp
平均ドライブとパス?ん0
を参照して%0
、ファイル名を含んでバッチファイルへのパスを?
それとも変なレーベルですか?
また、それが文書化された機能なのか、それとも非推奨になる傾向があるのかを知りたいです。
%~dp0
ます。通常、上位のヒットはSOのコンテンツを参照していることがわかります。
私は%~dp0
非常に便利で、バッチファイルの移植性を高めるために多く使用しています。
しかし、ラベル自体は私には非常に謎めいているようです...何をし~
ていますか?いdp
平均ドライブとパス?ん0
を参照して%0
、ファイル名を含んでバッチファイルへのパスを?
それとも変なレーベルですか?
また、それが文書化された機能なのか、それとも非推奨になる傾向があるのかを知りたいです。
%~dp0
ます。通常、上位のヒットはSOのコンテンツを参照していることがわかります。
回答:
呼び出す
for /?
コマンドラインでこの構文についてのヘルプを提供します(これはFORの外部でも使用できます。これはヘルプを見つけることができる場所です)。
さらに、FOR変数参照の置換が強化されました。次のオプションの構文を使用できるようになりました。
%~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
修飾子を組み合わせて複合結果を得ることができます。
%~dpI - expands %I to a drive letter and path only %~nxI - expands %I to a file name and extension only %~fsI - expands %I to a full path name with short names only %~dp$PATH:I - searches the directories listed in the PATH environment variable for %I and expands to the drive letter and path of the first one found. %~ftzaI - expands %I to a DIR like output line
上記の例では、%IとPATHを他の有効な値で置き換えることができます。%〜構文は、有効なFOR変数名で終了します。%Iのような大文字の変数名を選択すると、読みやすくなり、大文字と小文字を区別しない修飾子との混同が回避されます。
f
「フルパス名」、d
ドライブ文字、p
パスなど、さまざまな文字を使用でき、それらを組み合わせることができます。%~
はこれらのシーケンスのそれぞれの始まりであり、数字I
はそれがパラメーターで機能することを示します%I
(ここで、%0
は想定したとおりのバッチファイルの完全な名前です)。
I
。の0
代わりに使用する必要がありI
ます。私は何かを逃したかどうかはわかりませんが、人々に知らせています。
I
は、変数インデックスのプレースホルダーです。0
=呼び出しファイル、1
=引数#1、2
=引数#2など...
(最初に、この有用な参照サイトをバッチに推奨したいと思います:http : //ss64.com/nt/)
次に、もう1つの便利な説明を示します。http://htipe.wordpress.com/2008/10/09/the-dp0-variable/
%〜dp0変数
Windowsバッチファイル内で参照する場合、変数(ゼロです)%〜DP0はに拡大するDリヴ文字とPそのバッチファイルのATH。
変数%0-%9は、バッチファイルのコマンドラインパラメータを参照します。%1-%9は、バッチファイル名の後のコマンドライン引数を参照します。%0はバッチファイル自体を参照します。
パーセント文字(%)の後にチルダ文字(〜)を付ける場合は、パラメーター番号の前に修飾子を挿入して、変数の展開方法を変更できます。d修飾子はドライブ文字に展開され、p修飾子はパラメーターのパスに展開されます。
例:C:にbat_filesというディレクトリがあり、そのディレクトリにexample.batというファイルがあるとします。この場合、%〜dp0(d修飾子とp修飾子の組み合わせ)はC:\ bat_filesに展開されます。
詳細については、このMicrosoftの記事をご覧ください。
そして、ここからのより明確な参照:
%CmdCmdLine%
CMD.EXEに渡されたコマンドライン全体を返します
%*
最初のコマンドライン引数から始まるコマンドラインの残りを返します(Windows NT 4では、%*にはすべての先行スペースも含まれます)
%~dn
%nが有効なパスまたはファイル名(UNCなし)の場合、%n(nの範囲は0〜9)のドライブ文字を返します
%~pn
%nが有効なパスまたはファイル名(UNCではない)の場合、%nのディレクトリを返します
%~nn
%nが有効なファイル名の場合、%nのみのファイル名を返します
%~xn
%nが有効なファイル名の場合、%nのファイル拡張子のみを返します
%~fn
%nが有効なファイル名またはディレクトリの場合、%nの完全修飾パスを返します
不思議な ~
チルド演算子の良い参考文献を見つけました。
%~
文字列が呼び出されチルダパーセント演算子。次のような状況で見つけることができます%~0
。
:~
文字列が呼び出されチルダコロン演算子。あなたはそれを次のように見つけることができます%SOME_VAR:~0,-1%
。
%1-%9
コマンドライン引数を参照してください。それらが有効なパス値でない場合、%~dp1
- %~dp9
はすべてと同じ値に展開され%~dp0
ます。ただし、それらが有効なパス値である場合は、独自のドライバー/パス値に展開されます。
例:(batch.bat)
@echo off
@echo ~dp0= %~dp0
@echo ~dp1= %~dp1
@echo ~dp2= %~dp2
@echo on
実行1:
D:\Workbench>batch arg1 arg2
~dp0= D:\Workbench\
~dp1= D:\Workbench\
~dp2= D:\Workbench\
実行2:
D:\Workbench>batch c:\123\a.exe e:\abc\b.exe
~dp0= D:\Workbench\
~dp1= c:\123\
~dp2= e:\abc\
%0
バッチスクリプトの変数は、実行中のバッチファイルの名前に設定されます。
との~dp
間の特別な構文では%
、0
基本的に変数を展開し%0
てドライブ文字とパスを表示し、バッチファイルを含む現在のディレクトリを表示します。
ヘルプ= リンク
%0
ローカルハードドライブに.batファイルを保存せずにcmdで直接テストする方法はありますか?
非常に役立つもう1つのヒントは、現在のディレクトリを別のドライブに設定するには、%~d0
最初に使用してからを使用する必要があるということcd %~dp0
です。これにより、ディレクトリがバッチファイルのドライブに変更され、そのフォルダーに移動します。
または、#oneLinerLoversの場合、@ Omniがコメントで指摘されているようcd /d %~dp0
に、ドライブとディレクトリの両方が変更されます:)
これが誰かを助けることを願っています。
cd
ドライブやフォルダの両方を切り替えますそのパラメータが組み込まれています:cd /d %~dp0
/d
議論は役に立ちますが、これは代替回答の候補として投稿され、この回答に対するコメントではありません。これを指摘してくれてありがとう、私はそれについて知りませんでした:)
Strawberry Perlのポータブルシェルランチャーのすばらしい例:
set drive=%~dp0
set drivep=%drive%
if #%drive:~-1%# == #\# set drivep=%drive:~0,-1%
set PATH=%drivep%\perl\site\bin;%drivep%\perl\bin;%drivep%\c\bin;%PATH%
自分で負の1が何をしているのかわからないが、それはごちそうだ!
例はいいでしょう-ここに簡単なものがあります
for %I in (*.*) do @echo %~xI
現在のフォルダ内の各ファイルの拡張子のみを一覧表示します
CMDプロンプトからのより有用な変数の組み合わせ(前の応答にもリストされています)の場合: HELP FOR
このスニペットが含まれています
修飾子を組み合わせて複合結果を得ることができます。
%~dpI - expands %I to a drive letter and path only
%~nxI - expands %I to a file name and extension only
%~fsI - expands %I to a full path name with short names only
%~dp$PATH:I - searches the directories listed in the PATH
environment variable for %I and expands to the
drive letter and path of the first one found.
%~ftzaI - expands %I to a DIR like output line