测试得到一些结果:复制代码 在子过程中被解释成标号行, 而在主程序(文件级)中始终被解释成调用自身.
另外, 用 %0 作赋值的情况:
set prog=%0 处于 | %prog% callParams | !prog! callParams | 在子过程中 | 标号行 | 标号行 | 在主程序(文件级)中 | 调用子过程自身 | 调用主程序(文件级) |
测试代码:- @echo off
- REM echo %%0 Params
- REM (%0 Params) & rem 将调用主程序(文件级)自身, 而陷入死循环
-
- setlocal enabledelayedexpansion
- echo,& echo,@ Main code & echo,
- echo,%%0=%0
- echo,Params=%*
-
- if [%1]==[Params] (echo 在批处理主程序中运行 & exit /b)
-
- (set prog=%0) & rem 处于主程序(文件级)中
- echo prog=%prog%
-
- echo,call :子程序
- call :子程序
-
- echo,& echo,End of Main code & echo,
- pause
- goto :eof
-
- :子程序
- echo,& echo,@ Sub code & echo,
- echo,%%0=%0
- echo,%%~s0=%~s0
- echo,%%~f0=%~f0
- echo,Params=%*
- if [%1]==[Params] (echo 在批处理子程序中运行 & exit /b)
-
- echo prog=%prog%
-
- echo,%%0 Params
- %0 Params
- REM 上行被解释成标号行
-
- REM (set prog=%0) & rem 处于子过程中
- echo prog=%prog%
- echo,^^!prog^^! Params
- !prog! Params
-
- echo,%%prog%% Params
- %prog% Params
-
- echo,& echo, end of sub code & echo,
- exit /b
复制代码
|