为什么我的BAT文件变量没有被覆盖?

时间:2015-05-19 17:17:28

标签: windows variables batch-file jobs overwrite

我有这段代码:

@ECHO OFF

SET "SRCFOLDER=C:\Users\MyUserName\Desktop\PhotoTests"

SET "TEMPCODE=Hi"
ECHO %TEMPCODE%
ECHO.

FOR /F "tokens=*" %%G IN ('DIR /B %SRCFOLDER%') DO (
    ECHO %%G
    CALL tooltipInfo.bat %%G 19 | FIND /C "Star" > test.txt
    SET /P TEMPCODE=<test.txt
    ECHO %TEMPCODE%
    ECHO.
)

SET /P TEMPCODE=<test.txt
ECHO %TEMPCODE%
ECHO.

PAUSE

我对输出感到困惑,因为我注意到FOR循环中的变量没有被我认为应该是“test.txt”的内容覆盖,每次FOR循环运行时都会有所不同。

出于此示例的目的,文件 tooltipInfo.bat 将根据文件属性中记录的评级来回显文本字符串,如“1 Star”或“3 Stars”。 FIND语句应该会将“0”或“1”保存到 test.txt 文件中。

输出结果为:

Hi

Canon_Locked.JPG
Hi

Nikon_Locked.JPG
Hi

0

Press any key to continue . . .

我可以知道为什么TEMPCODE变量没有被循环覆盖并保留原始值“Hi”。但是在最后一段代码中,它能够读取并回显出文件的实际内容。

1 个答案:

答案 0 :(得分:1)

使用import amqp as amqp class MQ(): mqConn = None channel = None def __init__(self): self.connect() def connect(self): if self.mqConn is None: self.mqConn = amqp.Connection(host="localhost", userid="dev", password="dev", virtual_host="/", insist=False) self.channel = self.mqConn.channel() elif not self.mqConn.connected: self.mqConn = amqp.Connection(host="localhost", userid="dev", password="dev", virtual_host="/", insist=False) self.channel = self.mqConn.channel() def sendMQ(self, message): self.connect() lMessage = amqp.Message(message) self.channel.basic_publish(lMessage, exchange="DevMatrixE", routing_key="dev_matrix_q") 和括号时,这是一个常见的错误。问题在于,默认情况下,FOR(之间的每个变量在首次读取行时进行评估,然后在)的每次迭代中重复使用。

如果变量在循环期间发生变化(通过FOR),那么您需要将SET更改为%以获取括号内的变量,并使用{启用延迟展开{1}}

!