gpt4 book ai didi

variables - 批处理文件无法在 IF 子句中设置变量

转载 作者:行者123 更新时间:2023-12-02 22:16:21 27 4
gpt4 key购买 nike

即使发生匹配,以下代码也不会将 Run 更新为等于 N。这意味着我不会进入 CALL 代码。我在这里错过了什么吗?

SET Run=Y

REM Check current files date/time information and establish if the file has been present too long in the directory
REM Skip first 4 lines as header information not required

FOR /f "tokens=1-5 skip=4 delims= " %%G IN ('dir /OD "%SRCH_CRITERIA% "') DO (

ECHO "Params to processFile: " %%G %%H %%I ""%%K""
IF %%K.==. (
ECHO "K:nothing"
SET Run=N
ECHO %Run%
)

IF %%K==free (
ECHO "K:FREE"
SET Run=N
ECHO %Run%
)

ECHO %Run% RUN
IF %Run%=="Y" (
CALL :processFile "%%G" "%%H" "%%I" "%%K"
)
)

最佳答案

您需要使用cmd.exe的延迟扩展选项。

在脚本的顶部,放置:

setlocal enableextensions enabledelayedexpansion

然后输入:

endlocal

在底部。

那么你需要使用!Run!而不是%Run%

您的代码无法正常工作的原因是,整个 FOR 语句(包括其中的命令)在遇到该语句时都会被评估。这就是 %Run% 变量展开的地方。

通过使用延迟扩展,您不会扩展它们,直到实际需要它们(在 block 中设置它们之后)。

您可以看到此脚本中的差异:

@echo off
setlocal enableextensions enabledelayedexpansion

set xx=0
for %%i in (a b c d) do (
echo %%i
set /a "xx = xx + 1"
if %xx%==3 echo yes for normal
if !xx!==3 echo yes for delayed
)

endlocal

输出:

a
b
c
yes for delayed
d

您会注意到,使用 %xx% 进行的检查不起作用,因为它是在 for 语句启动时进行评估的(并且 xx为 0)。延迟扩展 !xx! 确实起作用,因为每次循环都会对其进行评估。

关于variables - 批处理文件无法在 IF 子句中设置变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1978088/

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