gpt4 book ai didi

batch-file - Windows 批处理文件 - 验证用户输入的环境变量是否为十六进制

转载 作者:行者123 更新时间:2023-12-04 05:58:27 26 4
gpt4 key购买 nike

在 Windows Server 2003 命令提示符下以交互方式运行的批处理文件中,SET/p 接受用户对环境变量的输入。如何确保用户输入仅包含十六进制字符(即 0123456789ABCDEF)?包含任何其他字符的输入应该失败。

例如:

  • 02A13 应该没问题。
  • 3Du*23I 应该会失败。

  • 逻辑需要像这样:
    :Get_Hex   
    Set /p _HexVal = Enter hex value:
    If not *ValidHexCheck* Echo Invalid input. Try again.&Goto Get_Hex
    :Continue

    ValidHexCheck 将被真正的代码取代。我不能使用 FINDSTR 的原因太愚蠢而无法进入这里。我想我可以在 FOR 循环中做到这一点。有人有好的想法吗?

    最佳答案

    小心 - 您可能不希望变量名中有空格,因此您需要删除 SET 语句中 = 之前的空格。

    一种解决方案是用空替换所有十六进制数字,然后查看是否还有剩余。

    @echo off
    setlocal enableDelayedExpansion
    :Get_Hex
    set "_HexVal="
    set /p _HexVal=Enter hex value:
    if not defined _HexVal echo You must enter a value. Try again.&goto Get_Hex
    set "test=!_HexVal!"
    for %%C in (0 1 2 3 4 5 6 7 8 9 A B C D E F) do if defined test set "test=!test:%%C=!"
    if defined test echo Invalid input. Try again.&goto Get_Hex

    我还添加了一个额外的测试来确保输入了一些东西。如果未输入任何内容,则保留当前值。这就是为什么必须在输入语句之前清除变量的原因。

    一种更简单的方法是使用 FINDSTR 查找仅包含 1 个或多个十六进制数字字符的行:
    @echo off
    setlocal enableDelayedExpansion
    :Get_Hex
    set "_HexVal="
    set /p "_HexVal=Enter hex value: "
    echo !_HexVal!|findstr /ri "^[0123456789ABCDEF][0123456789ABCDEF]*$" >nul || (
    echo Invalid input. Try again.
    goto Get_Hex
    )

    或者您可以使用 FINDSTR 来查找非十六进制数字,但您必须再次验证是否有值。
    @echo off
    setlocal enableDelayedExpansion
    :Get_Hex
    set "_HexVal="
    set /p "_HexVal=Enter hex value: "
    if not defined _HexVal echo Invalid input. Try again.&goto Get_Hex
    echo !_HexVal!|findstr /ri "[^0123456789ABCDEF]" >nul && (
    echo Invalid input. Try again.
    goto Get_Hex
    )

    另一种方法是让 FOR/F 查找非十六进制数字。同样,您还必须验证是否存在一个值。
    @echo off
    setlocal enableDelayedExpansion
    :Get_Hex
    set "_HexVal="
    set /p "_HexVal=Enter hex value: "
    if not defined _HexVal echo Invalid input. Try again.&goto Get_Hex
    for /f "eol=0 delims=0123456789ABCDEFabcdef" %%A in ("!_HexVal!") do (
    echo Invalid input. Try again.
    goto Get_Hex
    )

    关于batch-file - Windows 批处理文件 - 验证用户输入的环境变量是否为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9231044/

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