gpt4 book ai didi

windows - 为什么带有延迟扩展的 cmd batch IF 在 For 循环中给我错误的结果?

转载 作者:可可西里 更新时间:2023-11-01 09:58:54 25 4
gpt4 key购买 nike

在 for 循环和 if 语句中使用延迟扩展给我不正确的结果

@ECHO OFF  
SETLOCAL ENABLEDELAYEDEXPANSION
SET volume=k:
SET REQUIRED_SPACE=1073741824
FOR /f "tokens=1* delims=:" %%i IN ('fsutil volume diskfree %volume%') DO (
SET FREE_SPACE=%%j
)
SET FREE_SPACE=!FREE_SPACE: =!
IF NOT %FREE_SPACE% LSS %REQUIRED_SPACE% (
ECHO %FREE_SPACE% not less %REQUIRED_SPACE%
)ELSE ECHO %FREE_SPACE% less %REQUIRED_SPACE%

FOR /l %%A IN (1,1,1) DO (
FOR /f "tokens=1* delims=:" %%i IN ('fsutil volume diskfree %volume%') DO (
SET FREE_SPACE=%%j
)
SET FREE_SPACE=!FREE_SPACE: =!
IF NOT !FREE_SPACE! LSS !REQUIRED_SPACE! (
ECHO !FREE_SPACE! not less !REQUIRED_SPACE!
)ELSE ECHO !FREE_SPACE! less !REQUIRED_SPACE!
)
pause

结果是:

268685312  less 1073741824
268685312 not less 1073741824
Press any key to continue . . .

我不明白这是怎么回事。

最佳答案

在 if...else 中,右括号和 ELSE 关键字之间需要一个空格。

批处理对 SET 语句中的空格敏感。 SET FLAG = N 将名为“FLAGSpace”的变量设置为“SpaceN”的值

语法 SET "var=value"(其中值可能为空)用于确保分配的值中不包含任何杂散尾随空格。 set/a 可以安全地“无引号”使用。

(这在您的“required_space”设置中很重要,它包含一个包含的尾随空格,这对 if 语句应该没有影响;只是一个问题其中要注意)

请注意,您正在接近批处理的数字范围 -2147483648..2147483647 的限制。如果比较的任何一个值超过此限制,您需要转换为字母模式并用前导字符填充您的值,例如

 set "padded_var=                                     %var%"
set "padded_var=%padded_var:~-25%"

填充字符(此处为)并不特别重要,通常为0(但随后可能需要包含一个非数字以确保它不会被解释为八进制) 如果使用空格之类的分隔符,则“引用参数”。这个想法是使要比较的两个值具有相同的长度,以便逐个字符的从左到右比较按预期进行。 Space 是“通用选择”,因为它对普通字符的排序最少。

关于windows - 为什么带有延迟扩展的 cmd batch IF 在 For 循环中给我错误的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227098/

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