在子例程中,%0 扩展为子例程名称,而不是脚本名称。是否有合法的方式仍然可以访问脚本名称,或者我应该将其作为参数传递?
@echo off
call :subroutine %~f0 my parameters
exit /b
:subroutine
shift
echo Script name is %0
echo Parameters: %1 %2
exit /b
我希望调用语句只是
call :subroutine my parameters
在子例程中,%0 扩展为子例程名称,而不是脚本名称。是否有合法的方式仍然可以访问脚本名称,或者我应该将其作为参数传递?
@echo off
call :subroutine %~f0 my parameters
exit /b
:subroutine
shift
echo Script name is %0
echo Parameters: %1 %2
exit /b
我希望调用语句只是
call :subroutine my parameters
在一个函数中,您需要添加至少一个修饰符到%~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
我相信 %~nx0 会给你带有扩展名的文件名,而 %~n0 只会给你文件名......
我更喜欢在我的脚本顶部使用它:
set "This=%~dpnx0"
这样,您仍然保留当前正在运行的脚本的完整路径。如果只需要获取脚本的名称,您可以使用 FOR /F 循环来提取它:
set "This=%~dpnx0"
echo This=%This%
for /F %%I in ('echo.%This%') do set "Name=%%~nxI"
echo Name=!Name!