次の変数を定義するバッチ ファイルを見ています。
set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
- とはどういう意味ですか
%~d0
?%~p0
- 現在のディレクトリ、ドライブ、スクリプトへのパラメーターなどの既知の値のセットはありますか?
- 私が使用できる他の同様のショートカットはありますか?
次の変数を定義するバッチ ファイルを見ています。
set _SCRIPT_DRIVE=%~d0
set _SCRIPT_PATH=%~p0
%~d0
?%~p0
マジック変数%
nには、ファイルを呼び出すために使用される引数が含まれてい%0
ます。%1
%2
多くの場合、引数はファイル パスであるため、パスの一部を抽出するための追加の構文があります。~d
はドライブ、~p
はパス (ドライブなし)、~n
はファイル名です。それらは組み合わせることができるので~dp
、ドライブ + パスも同様です。
%~dp0
したがって、バットで非常に便利です。これは、実行中のバットファイルが存在するフォルダーです。
ファイルに関する他の種類のメタ情報も取得できます:~t
はタイムスタンプ、~z
はサイズです。
すべてのコマンド ライン コマンドのリファレンスについては、こちらを参照してください。チルダ マジック コードについては、 で説明します。
これらは拡張された変数置換です。バッチ ファイルで使用される %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 /?
。
はい、以下に示す他のショートカットを使用できます。コマンドでは、〜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/?
%~d0
引数 0 (スクリプト名) のドライブ文字%~p0
、パスを提供します。
注意すべき点:
バッチ ファイルをダブルクリック%0
すると、引用符で囲まれます。たとえば、このファイルを次のように保存するとしますc:\test.bat
。
@echo %0
@pause
それをダブルクリックすると、新しいコマンド プロンプトが開き、出力が表示されます。
"C:\test.bat"
ただし、最初にコマンド プロンプトを開いて、そのコマンド プロンプトから直接呼び出すと、入力した内容%0
が参照されます。と入力すると、引用符を入力しなかったため、 の出力には引用符がありません。test.bat
Enter%0
c:\>test.bat
test.bat
と入力すると、拡張子を入力しなかったためtest
Enter、 の出力に%0
も拡張子がありません。
c:\>test
test
についても同じ tEsT
Enter:
c:\>tEsT
tEsT
と入力する"test"
Enterと、の出力に%0
は引用符が付きますが (入力したため)、拡張子はありません。
c:\>"test"
"test"
最後に、 と"C:\test.bat"
入力すると、ダブルクリックした場合とまったく同じ出力が得られます。
c:\>"C:\test.bat"
"C:\test.bat"
%0
他のフォルダーからスクリプトを呼び出すことができるため、これらがすべての可能な値ではないことに注意してください。
c:\some_folder>/../teST.bAt
/../teST.bAt
上記の例はすべて にも影響します%~0
。これは、 の出力%~0
が単に%0
マイナス引用符 (存在する場合) の出力であるためです。
このコードは ~tilde 文字の使用法を説明していますが、これは私にとって最も紛らわしいものでした。これを理解すると、物事がはるかに理解しやすくなります。
@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