gpt4 book ai didi

batch-file - 字面比较奇怪

转载 作者:行者123 更新时间:2023-12-03 17:09:38 24 4
gpt4 key购买 nike

所以 - 这是代码

@echo off
setlocal

for %%a in (a A j J z Z) do for %%c in (d D) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")

for %%a in (Blue blue BLUE Red red RED) do for %%c in (Pink pink PINK) do if "%%c" geq "%%a" (echo "%%c" geq "%%a") else (echo "%%c" lss "%%a")
结果如下:
Microsoft Windows [Version 10.0.19042.804]
(c) 2020 Microsoft Corporation. All rights reserved.

"d" geq "a"
"D" geq "a"
"d" geq "A"
"D" geq "A"
"d" lss "j"
"D" lss "j"
"d" lss "J"
"D" lss "J"
"d" lss "z"
"D" lss "z"
"d" lss "Z"
"D" lss "Z"
"Pink" geq "Blue"
"pink" geq "Blue"
"PINK" geq "Blue"
"Pink" geq "blue"
"pink" geq "blue"
"PINK" geq "blue"
"Pink" geq "BLUE"
"pink" geq "BLUE"
"PINK" geq "BLUE"
"Pink" lss "Red"
"pink" lss "Red"
"PINK" lss "Red"
"Pink" lss "red"
"pink" lss "red"
"PINK" lss "red"
"Pink" lss "RED"
"pink" lss "RED"
"PINK" lss "RED"
(我只是剪切/粘贴/审查屏幕以显示 Windows 版本)
所以 - 我准备去杂货店购物(从午夜开始),这会让我理清头绪。
我在看东西吗?批处理不再进行 ASCII 比较了吗?我记得它曾经。
AFAICS, if突然决定自动进行不区分大小写的比较。这将破坏许多 SO 解决方案。

所以 - 批量响应。我仍在努力处理这一切。
基础问题:
我有一台标签打印机,它有 5 种内置点阵字体,并允许将乘数分配给 X 尺寸。显然,申请 1X乘数和 6Y产生丑陋的高瘦字符。扭转这些会产生丑陋的蹲字符。此外,并非所有乘法器 (1-9) 在每个方向都可用。
因此,我有一个“可接受的”X-Y 乘数对表,它不会产生明显失真的字符。由于我正在处理等宽字体,因此每个字体和乘法器对都会产生每个字符的覆盖范围,我希望将其最大化。应用每种可能的组合来解决最大覆盖范围是一个简单的过程,允许为标签的每个元素选择字体和乘数。
美中不足的是一种字体只有大写,所以如果元素包含小写字母,我想对该字体应用排除。
我用于排除的代码是应用 if测试每个字符 %%c
 if "%%c" geq "a" if "%%c" leq "z" set "islower=Y"
但是 这不像宣传的那样工作。它将设置 islower 不分大小 .因此,在文本包含字母的地方总是排除大写字体,因此我从未观察到它被使用过。哎呀。
因此这个问题。
在过去的几天里,我一直在做很多实验以及追赶美容 sleep (我需要),坦率地说,害怕大量的回复和评论。
结论: /i改编自 if如果它是第一个 token 。 not改编自 if如果是第一个 token 。
  • 因此要小心 if string1==string2如果 string1已解析为 not

  • 然后我们就剩下 string1 operator string2以及所使用的运算符与字符串的精确格式之间的复杂关系。 ==是最简单的。 ==没有要求前面或后面有分隔符。字符串按字母顺序进行比较,因此您需要 /i切换以执行不区分大小写的比较。 equ它的家庭是事情变得更加复杂的地方。每个都必须在分隔符之前和之后。进行比较的特性取决于操作数的结构。
  • 操作数可以是字符串、“带引号的字符串”、纯十进制(数字 0-9)或纯八进制(前导 0,数字 0-7)
  • 在纯数字参数的情况下,参数被转换为二进制,并比较结果。

  • 因此 IF 066 equ 54 评估为 TRUE,因为 066 八进制等于十进制 54。 ==可预见地将此评估为 FALSE

  • 对于带引号的十进制字符串 IF "102" gtr "94"评估为 FALSE 因为 1不是 大于 9
  • gtr geq lss leq字符串上的运算符,操作变得非常奇怪。 CAT gtr cat (引用或否)评估为 TRUE,正如 dog gtr cat"dog" gtr "cat" ,无论操作数的大小写。

  • 更奇怪的是,众所周知,猫大于狗。


  • 对不起 - 这对我来说真的太复杂了。我去休息了。
    不幸的是,这个问题似乎真的不适合 SO 的问答格式。

    最佳答案

    正如已经通过注释所描述的,字符串是逐个字符地比较的,比较在遇到第一个不匹配的字符或最短字符串中的最后一个字符后返回它的值。
    每个字符的值被转换为非语言环境特定的二进制值作为无符号字符。来自 IBM 的知识中心:

    The relation between the strings is determined by subtracting:string1[i] - string2[i], as i increases from 0 to strlen of thesmaller string. The sign of a nonzero return value is determined bythe sign of the difference between the values of the first pair ofbytes (both interpreted as type unsigned char)


    引用文献:
    docs.microsoft
    IBM knowledge Centre
    C++
    一组简单的测试,展示了 strcmp 的方式应该得到的返回。评估字符串:
    IF "Pink" equ "pink" (Echo true) else Echo false
    false
    IF "Pink" LSS "pink" (Echo true) else Echo false
    false
    IF "Pink" GTR "pink" (Echo true) else Echo false
    true
    IF "Pink" GTR "pinky" (Echo true) else Echo false
    false
    IF "Pink" lss "pinky" (Echo true) else Echo false
    true
    IF "Pink" GTR "Pinky" (Echo true) else Echo false
    false
    IF "Pink" GTR "pinky" (Echo true) else Echo false
    false
    由于评估忽略了第一个非匹配字符之外的字符,因此出现了混淆:
    IF "Pink" lss "aaaaa" (Echo true) else Echo false
    false
    IF "Pink" GTR "Z" (Echo true) else Echo false
    false
    一旦遇到不匹配的字符,就会返回 false,从而使字符串长度在比较中无关紧要。在上述两个示例中的第一个中, strcmp 返回 false尽快 P被评估为 GTR 比 a .如果比较为: IF "Pink" lss "a" (Echo true) else Echo false,结果将相同

    关于batch-file - 字面比较奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66319409/

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