我需要在script.cmd中区分这两种情况:
C:\> call script.cmd
C:\> script.cmd
我如何确定我的script.cmd是直接调用的,还是在使用CALL的上下文中调用的?
如果重要的话,这是在Windows 7上。
@echo off
set invoked=0
rem ---magic goes here---
if %invoked%==0 echo Script invoked directly.
if %invoked%==1 echo Script invoked by a CALL.
有人知道“魔法在这里”吗?它会检测到已经被调用并设置调用=1。
2条答案
按热度按时间mwngjboj1#
目前,我看不到检测它的方法,但作为一种变通方案,您可以始终强制使用哨兵。
这将允许您使用指定的语法
发送的代码以随机退出代码结束脚本以进行测试。退出代码为0时将继续执行
注意:要使它工作,至少在XP中,批处理文件的
call
必须是批处理文件中的最后一个代码qaxu7uf22#
检查脚本的路径是否在CMDCMDLINE变量中。如果没有,那么它可能被调用了。
在本例中,我使用
%CMDCMDLINE:"=/%
将引号转换为正斜杠(FIND命令不能搜索引号),并使用<NUL SET/P=""
回显它,以便文件路径中的某些字符(如“与”符号)不会破坏脚本。