1

cmd では、チルダ「演算子」を使用して、渡された引数でいくつかのクールなトリックを実行できます。たとえば、%~dp0 は現在のスクリプトのパス名を返します。

任意の環境変数に対してそれを行うことができますか? 例えば:

 set foo=1234.exe
 echo %~nfoo%

これを達成する方法はありますか?

4

2 に答える 2

1

はい、そうです。

次のファイル (私は 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
于 2013-10-03T20:57:22.873 に答える