作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
即使发生匹配,以下代码也不会将 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/
我是一名优秀的程序员,十分优秀!