gpt4 book ai didi

windows - 从外部函数批处理返回字符串

转载 作者:可可西里 更新时间:2023-11-01 14:16:42 26 4
gpt4 key购买 nike

我有两个批处理文件。一个是主(调用者)文件,一个是函数。该函数采用一个参数,执行一些操作,然后我想将字符串返回给调用者 (main.bat)。 %ERRORLEVEL% 不是一个选项,因为它只能返回整数。

主.bat:
call function.bat hello
函数.bat:
REM 一些代码......
[这里是将字符串返回到调用文件的代码]
看似基本操作,必有办法。另外,我不喜欢用输出制作文件并在 main.bat 中读取它,因为我想让它作为一个易于使用的函数工作。

最佳答案

这两个批处理文件都由同一个 Windows 命令处理器进程执行,因此共享所有环境变量。

主.bat:

@echo off
set "MyVariable="
call Function.bat hello
echo MyVariable=%MyVariable%

函数.bat:

@echo off
rem Some code ...
set "MyVariable=%~1"

可能是 Function.bat 出于某种原因使用命令 SETLOCAL。在这种情况下,在命令 SETLOCAL 之后定义的所有环境变量以及对环境变量所做的所有修改都将在相应的 ENDLOCAL 之后丢失。此命令由 Windows 命令处理器在退出批处理文件执行时隐式调用,每个 SETLOCAL 尚未显式执行相应的 ENDLOCAL。阅读 this answer 以了解有关命令 SETLOCALENDLOCAL 的详细信息。

有必要在与命令 ENDLOCAL 相同的命令行上显式设置环境变量,并使用直接环境变量扩展将环境变量的值从当前环境变量列表传递到先前的环境变量列表.

函数.bat:

@echo off
setlocal EnableExtensions DisableDelayedExpansion
rem Some code ...
set "MyVariable=%~1"
endlocal & set "MyVariable=%MyVariable%"

Windows命令解释器首先对最后一行进行预处理

endlocal   & set "MyVariable=hello"

因此预处理后的命令行不再包含任何变量引用。命令 ENDLOCAL 恢复以前的环境,这会导致删除环境变量 MyVariable。但是在同一命令行上指定的第二个命令 SET 在恢复的环境中再次使用值 hello 设置该变量。

另请参阅 Single line with multiple commands using Windows batch file

关于windows - 从外部函数批处理返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50304807/

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