3

サブルーチンでは、%0 はスクリプト名ではなく、サブルーチン名に展開されます。スクリプト名にアクセスする正当な方法はありますか、それとも引数として渡す必要がありますか?

@echo off

call :subroutine %~f0 my parameters
exit /b

:subroutine
shift
echo Script name is %0
echo Parameters: %1 %2
exit /b

callステートメントをただにしたい

call :subroutine my parameters
4

3 に答える 3

4

関数では、少なくとも 1 つの修飾子を に追加する必要があります%~0

call :test
exit /b

:test
echo 0   %0    - shows "test"
echo ~0  %~0   - shows "test"
echo ~f0 %~f0  - shows the batch name (full path)
exit /b
于 2013-02-10T11:58:02.893 に答える
2

%~nx0 は拡張子付きのファイル名を提供し、 %~n0 はファイル名のみを提供すると思います...

于 2013-02-10T09:02:12.777 に答える
1

スクリプトの上部でこれを使用することを好みます。

set "This=%~dpnx0"

このようにして、現在実行中のスクリプトのフルパスを保持します。スクリプトの名前だけを取得する必要がある場合は、FOR/Fループを使用してスクリプトを抽出できます。

set "This=%~dpnx0"
echo This=%This%
for /F %%I in ('echo.%This%') do set "Name=%%~nxI"
echo Name=!Name!
于 2013-02-10T10:20:42.850 に答える