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 :subroutine my parameters
4

3 回答 3

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
于 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 回答