AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / computer / 问题 / 1716756
Accepted
Clamarc
Clamarc
Asked: 2022-04-18 15:08:33 +0800 CST2022-04-18 15:08:33 +0800 CST 2022-04-18 15:08:33 +0800 CST

带有负变量的 if 语句

  • 772

我的输入变量只包含负值,-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 并在它应该处理记录时发出错误消息。

windows-10 batch
  • 2 2 个回答
  • 116 Views

2 个回答

  • Voted
  1. Clamarc
    2022-04-18T17:44:18+08:002022-04-18T17:44:18+08:00

    这是它的工作原理:

    set /p _vLUF=Valor LUFS:
    set _cnt_vLUF=0
    

    我在计数器等于 4 的字符串的开头插入了字符“0”:

    If !_cnt_vLUF!==4 (
     set positivo=%_vLUF:~1,3%
     set positivo=0!positivo!   # inserted the character "0" at the beginning string
    )ELSE (
     set positivo=%_vLUF:~1,4%
    )
    

    并将固定比较值从“5.0”更改为“05.0”:

    If "!positivo!" lss "05.0" (       # changed the fixed comparison value to "05.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
    

    所以 IF 指令可以对值进行正确的比较:

    If "01.0" lss "05.0"; If "04.9" lss "05.0"; If "10.0" lss "05.0"...

    • 0
  2. Best Answer
    Io-oI
    2022-04-18T18:11:51+08:002022-04-18T18:11:51+08:00

    一些建议基本上使用子字符串

    @echo off 
    
    Setlocal EnableDelayedExpansion
    
    for %%i in ($E,$H)do for /f skip^=4 %%$ in ('
         echo;prompt;%%~i^|cmd')do set "_%%~i=%%$"
    
    set /p "'=!_$E![0m" <nul & cd /d "%~dp0"
    
    %:^[
    set "_var=LUF,len,pos+,int,dig,var"
    for %%i in (%_var%)do call set "_%%i="
    
    set /p "_LUF=-!_$H!  !_$E![1;4;32mValor LUFs:!_$e!" <nul 
    set /p "_LUF=[0m !_$E![4;1;33m" || goto %:^(
    set /p "'=!_$e![0;0m" <nul & color
    
    =;(echo;!_LUF!|findstr /b \0.*
       echo;!_LUF!|findstr /e \.[0-9]
       echo;!_LUF!|findstr /b \-[0-9].*
       echo;!_LUF!|findstr /vr "[a-Z] \+" 
      );= >nul && (set "_pos+=!_LUF:-=!") || goto %:^(
    
    set /a "_cnt=0, _len=0"
    set "_int=!_pos+:.%_pos+:*.=%=!"
    set "_=%_pos+:*.=" && set "_dig=%"
    
    for /f tokens^=1*^ delims^=. %%i in ('
         echo;!_pos+!')do if 1%%~i%%~j gtr 1700 =;(
             goto %:^();= else if 1%%~i%%~j leq 149 goto %:^(
    
    for /f tokens^=1^ delims^=^ eol^= %%x in =;('
        "cmd.exe /u /c echo;!_LUF!|find/v """
        ')do set /a "_len+=1+0"
    
    set "_len=0!_len!" && call set "_len=!_len:~-2!"
    echo\!_$E![0m & echo\!_$H!!_$E![1F!_$E![0J
    goto %:^]
    
    %:^(
    echo\!_$E![1F!_$E![0J!_$E![0J && color
    
    set /p "'=-!_$H!  !_$E![1;31mInvalid LUFs Value^! Valid values: " <nul 
    set /p "'=!_$E![32m-70.0 to -5.0!_$E![1;31m!_$E![32m " <nul  
    set /p "'=!_$E![1;33mTry Again?!_$E![7m!_$E![0m " <nul
    
    call & choice 
    
    if "%errorlevel%" == "1" =;(
        echo;!_$E![1F!_$E![0J!_$E![1F!_$E![0J!_$E![1F!_$E![0J & goto %:^[
       );= else endlocal && goto :eof 
    
    %:^]
    :: your next command became here... 
    echo;!_$E![1F!_$E![0J
    set /p "'=-!_$H!  !_$E![1;04m!_$E![1;32mInput vLUF: !_$E![33m!_LUF!!_$E![1;32m ^| " <nul 
    set /p "'=!_$E![1;32mPositive: !_$E![33m!_pos+! !_$E![1;32m^| Length: " <nul 
    set /p "'=!_$E![33m!_len! !_$E![1;32m^| Value: " <nul 
    set /p "'=!_$E![33m!_int!!_dig!!_$E![0m " <nul
     
    echo\ & echo;  Obs: I'm in label %%^:^]
    endlocal & goto :eof
    

    • 0

相关问题

  • VMware Workstation USB 仲裁服务无法自动启动

  • 如何在域和 Linux 活动目录中启用指纹传感器

  • 资源管理器侧面板中的桌面外壳快捷方式

  • 为什么我不能将文件从 Android 发送到 Windows 10?

  • 在多个文件上打开方式?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何减少“vmmem”进程的消耗?

    • 11 个回答
  • Marko Smith

    从 Microsoft Stream 下载视频

    • 4 个回答
  • Marko Smith

    Google Chrome DevTools 无法解析 SourceMap:chrome-extension

    • 6 个回答
  • Marko Smith

    Windows 照片查看器因为内存不足而无法运行?

    • 5 个回答
  • Marko Smith

    支持结束后如何激活 WindowsXP?

    • 6 个回答
  • Marko Smith

    远程桌面间歇性冻结

    • 7 个回答
  • Marko Smith

    子网掩码 /32 是什么意思?

    • 6 个回答
  • Marko Smith

    鼠标指针在 Windows 中按下的箭头键上移动?

    • 1 个回答
  • Marko Smith

    VirtualBox 无法以 VERR_NEM_VM_CREATE_FAILED 启动

    • 8 个回答
  • Marko Smith

    应用程序不会出现在 MacBook 的摄像头和麦克风隐私设置中

    • 5 个回答
  • Martin Hope
    Saaru Lindestøkke 为什么使用 Python 的 tar 库时 tar.xz 文件比 macOS tar 小 15 倍? 2021-03-14 09:37:48 +0800 CST
  • Martin Hope
    CiaranWelsh 如何减少“vmmem”进程的消耗? 2020-06-10 02:06:58 +0800 CST
  • Martin Hope
    Jim Windows 10 搜索未加载,显示空白窗口 2020-02-06 03:28:26 +0800 CST
  • Martin Hope
    v15 为什么通过电缆(同轴电缆)的千兆位/秒 Internet 连接不能像光纤一样提供对称速度? 2020-01-25 08:53:31 +0800 CST
  • Martin Hope
    andre_ss6 远程桌面间歇性冻结 2019-09-11 12:56:40 +0800 CST
  • Martin Hope
    Riley Carney 为什么在 URL 后面加一个点会删除登录信息? 2019-08-06 10:59:24 +0800 CST
  • Martin Hope
    zdimension 鼠标指针在 Windows 中按下的箭头键上移动? 2019-08-04 06:39:57 +0800 CST
  • Martin Hope
    jonsca 我所有的 Firefox 附加组件突然被禁用了,我该如何重新启用它们? 2019-05-04 17:58:52 +0800 CST
  • Martin Hope
    MCK 是否可以使用文本创建二维码? 2019-04-02 06:32:14 +0800 CST
  • Martin Hope
    SoniEx2 更改 git init 默认分支名称 2019-04-01 06:16:56 +0800 CST

热门标签

windows-10 linux windows microsoft-excel networking ubuntu worksheet-function bash command-line hard-drive

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve