从子例程中获取批处理文件名

时间:2013-02-10 07:17:40

标签: batch-file cmd subroutine

在子例程中,%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

3 个答案:

答案 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!