cmd では、チルダ「演算子」を使用して、渡された引数でいくつかのクールなトリックを実行できます。たとえば、%~dp0 は現在のスクリプトのパス名を返します。
任意の環境変数に対してそれを行うことができますか? 例えば:
set foo=1234.exe
echo %~nfoo%
これを達成する方法はありますか?
cmd では、チルダ「演算子」を使用して、渡された引数でいくつかのクールなトリックを実行できます。たとえば、%~dp0 は現在のスクリプトのパス名を返します。
任意の環境変数に対してそれを行うことができますか? 例えば:
set foo=1234.exe
echo %~nfoo%
これを達成する方法はありますか?
はい、そうです。
次のファイル (私は test1.cmd という名前を付けました) には、ファイル パスと名前を同じ .cmd ファイル内のサブルーチンに渡し、ドライブ文字とパスを取得する例があります。サブルーチンの最後の行でより多くの環境変数を設定すると、ドライブ文字、パス、ファイル名、属性などのより多くの組み合わせを返すことができます。
その最後の行は重要な部分です。Windows コマンド プロセッサは一度に 1 行ずつ評価するため、行は最初に環境変数をテキスト値に展開してから行を処理します。その展開された行はサブルーチンのスコープを破棄し、外側のスコープ (endlocal) に戻り、新しい変数 (mytest2) をサブルーチンの (展開された) %dp1 の値に設定し、goto :eof を実行して呼び出し元に戻ります。ライン。
setlocal
set mytest=c:\windows\a file with spaces in name.txt
call :mytest2 "%mytest%"
echo %mytest2%
:ender
endlocal
goto :eof
:mytest2
setlocal
echo %~dp1
endlocal && set mytest2=%~dp1 && goto :eof