我的输入变量只包含负值,-5.0,-10.0... 将由 IF 语句检查。当变量小于 -5.0 时,例如。-4.9, -3.0,... 将发送无效值消息。
为了避免涉及到负号的比较,我统计了变量的字符来得到不带符号的变量的值,见下图:
我使用此链接来使用变量中的字符数:
Count variable characters with negative value
第一个变量:
set /p _vLUF=LUFS value: -5.0
echo vLUF: %vLUF%
vLUF: -5.0
第二个变量:
set /p _vLUF=LUFS value: -10.0
echo vLUF: %vLUF%
vLUF: -10.0
计算变量的字符:
setlocal enabledelayedexpansion
for %%i in (v)do set _cnt_%%~i=<nul
for /f delims^=^ eol^= %%G in ('"cmd.exe /u /c echo=!_vLUF!|find/v """')do set /a "_cnt_vLUF+=1+0"
First variable: has 4 characters
Second variable: has 5 characters
从变量中删除符号:
If !_cnt_vLUF!==4 (
set positive=%_vLUF:~1.3%
)ELSE (
set positive=%_vLUF:~1.4%
)
echo first variable: !positive!
first variable: 5.0
echo second variable: !positive!
second variable: 10.0
if 语句发送警告信息:
If "!positive!" lss "5.0" (
SETLOCAL EnableExtensions DisableDelayedExpansion
echo %ESC%[31mInvalid LUFS Value! Valid values:%ESC%[32m
-70.0 to -5.0%ESC%[0m%ESC%[31m.%ESC%[0m%ESC%
[31mReturn? (y=yes/enter=exit^) %ESC%[0m
SETLOCAL EnableDelayedExpansion
set /p r=""
IF /i "!r!"=="s" goto SETLUFSPEAK
goto notfound
)
endlocal
只要变量的值在 0.0 到 9.9 之间,If 语句就可以正常工作,例如:
3.0 invalid value message
4.9 Invalid value message
5.0 process without error message
9.9 process without error message
但是当值变为 10.0 时,IF 语句认为值 10.0 小于 5.0 并在它应该处理记录时发出错误消息。
这是它的工作原理:
我在计数器等于 4 的字符串的开头插入了字符“0”:
并将固定比较值从“5.0”更改为“05.0”:
所以 IF 指令可以对值进行正确的比较:
If "01.0" lss "05.0"; If "04.9" lss "05.0"; If "10.0" lss "05.0"...
一些建议基本上使用子字符串