在子例程中,%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 :(得分:4)
在函数中,您需要向%~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
答案 1 :(得分:2)
我相信%~nx0会给你带扩展名的文件名,%~n0会给你一个文件名......
答案 2 :(得分: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!