gpt4 book ai didi

batch-file - 是否可以检测批处理文件是否使用 CALL 命令启动?

转载 作者:行者123 更新时间:2023-12-04 05:17:21 24 4
gpt4 key购买 nike

问题在于CALL command doubles插入符号 ^并加倍percentage a single one .而在 hybrid文件这可能是一个大问题。或者如果没有使用 CALL 执行 bat来自另一只 bat ,并且您想警告用户。
%cmdcmdline% (尽管这可以在文件直接从提示符执行时使用)和 (goto)>nul (最终这可以与 this 一起使用)我认为在这里没有用的技术。

我仍在考虑这个,但如果有人提出优雅的解决方案会很棒。

编辑 .一种可能的方法是检测 batch recursion level尽管需要一种可靠的方法来检查此配置条目(我不知道它是如何计算的)。

最佳答案

Jeb's answer 一样,这无法区分是当前批处理文件已被调用还是从被调用的批处理文件中直接调用。此代码仅检测完成后执行上下文是批处理文件(在某处有 call 到达这一点)还是命令行(没有任何 call 或初始上下文是命令行)。不一样,但也许有人可以从中得出更好的方法。

已编辑 在 Jeb 发表评论之后。我虽然echo可能会有更多问题,但事实并非如此,所以 (goto)方法显然是更好的选择。

@echo off
rem Check if this is the initial invocation or we have already determined
rem how the batch file was started

rem If already tested save method, remove test variable and goto main
if defined __callTest__ (
set "startMethod=%__callTest__%"
set "__callTest__="
goto :main
)

rem Initial invocation - Test routine

rem Cancel current batch context and check if the new context is
rem - batch (there was a call somewhere)
rem - command line (no call)
rem Once the invocation method is determined, restart the current batch

setlocal enableextensions disabledelayedexpansion
call :getCurrentFile _f0
(
rem Cancel context
2>nul (goto)

rem The context cancel operation interferes with echo logic. Restore
echo on

rem We try to read a non existing variable and see if we could.
rem - In command line context, the reading of a non existing variable
rem returns the name of the variable, setting our test var
rem - In batch context, reading a non existing variable does not
rem return anything, and the test variable is undefined

call set "__callTest__=%%{[%random%""%random%]}%%"
if defined __callTest__ (
set "__callTest__=direct"
"%_f0%" %*
) else (
set "__callTest__=call"
call "%_f0%" %*
)
)
:getCurrentFile returnVar
set "%~1=%~f0"
goto :eof

rem Main batch code
:main
setlocal enableextensions disabledelayedexpansion
echo Method invocation is [ %startMethod% ]
goto :eof

是的,当然,不是防弹。这段代码在 %*附近有习惯性的批处理参数处理问题。 .

关于batch-file - 是否可以检测批处理文件是否使用 CALL 命令启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33939966/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com