gpt4 book ai didi

windows - 此时 %x 出乎意料。批处理脚本

转载 作者:可可西里 更新时间:2023-11-01 12:37:09 27 4
gpt4 key购买 nike

@echo off
for /f "tokens=1,2 delims=," %%x in (my.csv) do (
if %M% LSS %%x set M=%%x
)
echo Max X Value= %M%

有时它工作正常,有时它会失败并出现以下错误:

%x was unexpected at this time.

最佳答案

问题是您在 for 循环中使用了 %m%。这是在读取循环时评估的(在所有迭代之前)。换句话说,整个循环,直到并包括右括号,在执行之前被读取和评估。所以 %m% 将始终是它的初始值,无论您在循环中实际将其设置为什么。

一个例子应该可以说明这一点:

set val=7
for %%i in (1) do (
set val=99
echo %val%
)
echo %val%

这会导致(对某些人而言)意想不到的结果:

7
99

仅仅是因为第一个 echo 语句中的 %val% 在任何一个运行之前被解释(即,整个 for 循环被解释)。

您需要延迟扩展以及强制将 m 的值设置为第一个 %%x 的东西。使用 setlocal 命令和 !m! 而不是 %m% 将延迟 m 的评估,直到每次行被执行。

此外,将 m 初始设置为空,并在它时强制将其设置为 %%x 将确保第一个值%%x 被加载到 m 中。

@echo off
setlocal enableextensions enabledelayedexpansion
set m=
for /f "tokens=1,2 delims=," %%x in (my.csv) do (
if "!m!" == "" set m=%%x
if !m! lss %%x set m=%%x
)
echo Max X Value = !m!
endlocal

将上述代码与此 my.csv 文件一起使用:

1,a
2,b
10,c
3,d

结果输出:

Max X Value = 10

如预期的那样,或者对于您在另一条评论中的样本数据:

422,34
464,55
455,65
421,88

你得到:

Max X Value = 464

关于windows - 此时 %x 出乎意料。批处理脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2190295/

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