返回

批处理脚本变量循环设置指南:解决“*100 is unexpected at this time”错误

windows

*批处理脚本中的变量循环设置:解决“100 is unexpected at this time”错误

问题

在批处理脚本中使用循环设置变量时,可能会遇到“*100 is unexpected at this time”错误。这是由于在使用 set /A 命令设置整数变量之前,未正确声明变量所致。

解决方案

为了解决此错误,需要先声明变量为整数变量,然后再使用 set /A 命令进行赋值。

原始代码:

set /A pprog=(100-%sum%)*100 / (%count%+%count0%)

修改后的代码:

set /A tmp=(100-%sum%)*100
set /A pprog=tmp / (%count%+%count0%)

在修改后的代码中,我们首先使用 set /A 将计算结果分配给临时变量 tmp,然后再将 tmp 的值赋值给变量 pprog

代码示例

下面是一个代码示例,展示了如何解决此错误:

@echo on & setlocal

set count=0
set pattern=*.mp4
set pattern0=*.webm
for /f %%i in ('dir /b /a-d %pattern% ^| find /c /v ""') do @call set count=%%i
for /f %%i in ('dir /b /a-d %pattern0% ^| find /c /v ""') do @call set count0=%%i
set sum=%count% + %count0%
set total=%sum%
FOR /r %%i in (*.mp4,*.webm) DO (
set /A tmp=(100-%sum%)*100
set /A pprog=tmp / (%count%+%count0%)
set /A sum=%sum% - 1
echo %pprog% done %sum% files left out of %total%
)
pause

常见问题解答

1. 为什么需要声明整数变量?

在批处理脚本中,set /A 命令用于对整数变量进行算术运算。如果变量未声明为整数变量,则 set /A 将无法正确执行计算。

2. 如何声明整数变量?

可以使用以下语法声明整数变量:

set /A variable_name=value

3. 除了 set /A 命令之外,还有其他用于设置整数变量的方法吗?

除了 set /A 命令之外,还可以使用以下方法设置整数变量:

  • set variable_name=value:将字符串值分配给变量。
  • for /f "tokens=1" %%i in (value) do set variable_name=%%i:从字符串中提取第一个令牌并将其分配给变量。

4. 什么是临时变量?

临时变量是在特定范围内使用的变量。在我们的示例中,tmp 是一个临时变量,用于存储中间计算结果。

5. 如何使用 FOR /R 命令?

FOR /R 命令用于在指定目录中递归处理文件或文件夹。在我们的示例中,我们使用 FOR /R 循环遍历当前目录和所有子目录中的所有 MP4 和 WEBM 文件。