batch-file - 如何获取调用bat脚本的名称

标签 batch-file call invoke

我需要让我的 2.bat 脚本行为取决于调用脚本的名称。

场景: 2.bat 是从许多其他外部脚本调用的,我无权更改这些脚本。只有 2.bat 在我手下。

1.bat:

...
call 2.bat

2.bat:

...here place something extracting "1.bat"...

最佳答案

由于您无法更改调用 bat,因此如果它是通过 cmd 控制台触发的(可能是内存转储可能有帮助?),则几乎不可能获取其名称,因为 ProcessId 将仅保存 的信息cmd.exe。命令提示符历史记录可以为您提供一些信息,但它不可靠(并且需要转储到临时文件)

如果调用 bat 被双击,你可以使用这个:

 setlocal enableDelayedExpansion
for /f "tokens=2* delims= " %%a in ("%cmdcmdline%") do (
    if /i "%%~a" equ "/c" (
        for %%# in (%%~b) do (
            echo calling bat : %%~#
        )
    ) else (
        doskey /history >"%tmp%\cmd.history"
        for /f "usebackq tokens=* delims=" %%# in ("%tmp%\cmd.history") do (
            set "last_command=%%#"
        )
        echo probably this is the calling bat: !last_command!
        del /q /f "%tmp%\cmd.history"
    )
) 


pause

关于batch-file - 如何获取调用bat脚本的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43089515/

相关文章:

batch-file - 如何批量获取当前连接的无线网络名称?

batch-file - 在运行时通过bat文件将值传递给JMeter脚本

php - 通过 PHP exec 批处理文件调用 ffmpeg

windows - 如何批量获取未识别的网络适配器名称

c++ - Pointer->Call() 和 (*Pointer).Call() 之间的区别

C#:使用反射动态调用显式实现的方法

powershell - Powershell:具有转义参数(-%)的调用运算符(&)无法与非静态参数一起使用

java - 在 Java 中从一种方法调用 String 到另一种方法

c++ - 带成员函数的 std::is_nothrot_invocable

vb.net - 调用匿名方法