yhxhappy 发表于 2024-3-22 13:11:35

[已解决] 程序在CMD执行时如何SET变量

本帖最后由 yhxhappy 于 2024-3-23 20:29 编辑

我在写一个工具,在CMD中执行时,需要把工具读取到的信息转为 CMD变量,供批处理执行时调用。

以下示例是将 $DATE的值 转为 CMD的变量 %DATE%,不知道如何实现。

#AutoIt3Wrapper_Change2CUI=y
$DATE = @YEAR & @MON & @MDAY
ConsoleWrite("SET DateTest=" & $DATE)

邪恶海盗 发表于 2024-3-22 14:26:31

示例代码发上来...


---------------

yhxhappy 发表于 2024-3-22 16:48:57

邪恶海盗 发表于 2024-3-22 14:26
示例代码发上来...




Hello, 有发示例代码,编译后在CMD中执行,会返回 DateTest=YYYYMMDD。我想实现 CMD命令 SET 的效果
让变量 %DateTest%的值等于示例中 $DATE 的值。

E:\>test.exe
SET DateTest=20240322
E:\>echo %DateTest%
%DateTest%--没有给变量赋值

邪恶海盗 发表于 2024-3-22 17:02:33

yhxhappy 发表于 2024-3-22 16:48
Hello, 有发示例代码,编译后在CMD中执行,会返回 DateTest=YYYYMMDD。我想实现 CMD命令 SET 的效果
让变 ...

用CMD调用AU3变量?
为毛不用AU3执行CMD命令?

yhxhappy 发表于 2024-3-22 17:06:03

邪恶海盗 发表于 2024-3-22 17:02
用CMD调用AU3变量?
为毛不用AU3执行CMD命令?

因为工具只是整个批处理中的一小部分,实现单一的功能,功能是读取一些信息转为CMD变量。
比如读取本机LAN MAC,转为CMD变量 %LANMAC% 供后续的 BAT 调用。

afan 发表于 2024-3-23 09:52:25

附议海盗,感觉Au3操作批处理更简单,反向操作可能会有麻烦。
通常使用环境变量、注册表、文件中介等。

yhxhappy 发表于 2024-3-23 14:13:47

将整个批处理都用AU3重写是可以的,但我这里情况是:批处理是其他人在用的,在某个节点读取某个信息遇到了困难,让我用AU3来实现这一部分功能。
现在AU3已经写好,能将读取到的信息输出到CMD控制台。
在批处理中也可以读取回显信息,截取想要的字符设置变量。

只是我想看下有没有更好的办法,通过AU3直接将“值”赋值给 CMD 中的变量。
看到过其他人写的程序,读取到了一排信息,十几行,全部实际的转换为 CMD 变量。
后面的批处理在调用时不需要再处理,直接使用 %xxx% 这种格式变量。

zghwelcome 发表于 2024-3-23 15:18:23


yhxhappy 发表于 2024-3-23 20:27:38

zghwelcome 发表于 2024-3-23 15:18


感谢!

通过批处理的配合,达到了我想要的效果。

hnfeng 发表于 2024-3-25 09:40:46

本帖最后由 hnfeng 于 2024-3-25 09:48 编辑

8楼的方法使用 For 命令获取 AU3的exe命令返回的值。这也是我常用的方法,简单,不用生成临时文件。

还有一种方法,生成临时批处理并运行一下,变量就来了,对于一次需要多个返回变量的可能更高效
#AutoIt3Wrapper_Outfile=TempBat.exe
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Change2CUI=y

Local $DATE = @YEAR & @MON & @MDAY
Local $hTempBat=FileOpen("TempBat.bat", 2+512)
FileWrite($hTempBat, "SET DateTest=" & $DATE)
FileClose($hTempBat)
@echo off

echo 第1次,参数应该未定义
echo %DateTest%
echo;

TempBat.exe
call TempBat.bat

echo 第2次,已经获取参数值
echo %DateTest%

del TempBat.bat > nul

echo;&pause

yhxhappy 发表于 2024-3-25 16:01:13

hnfeng 发表于 2024-3-25 09:40
8楼的方法使用 For 命令获取 AU3的exe命令返回的值。这也是我常用的方法,简单,不用生成临时文件。

还有 ...

感谢分享,又学会了新的方法。

qq413774005 发表于 2024-4-10 16:46:31

@echo off color f3 set ip=192.168.0.101 set port=22 echo 本地命令任务:命令 echo 前 pause exit
页: [1]
查看完整版本: [已解决] 程序在CMD执行时如何SET变量