作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以 - 这是代码
@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 版本)
if
突然决定自动进行不区分大小写的比较。这将破坏许多 SO 解决方案。
1
为
X
乘数和
6
为
Y
产生丑陋的高瘦字符。扭转这些会产生丑陋的蹲字符。此外,并非所有乘法器 (1-9) 在每个方向都可用。
if
测试每个字符
%%c
if "%%c" geq "a" if "%%c" leq "z" set "islower=Y"
但是 这不像宣传的那样工作。它将设置
islower
不分大小 .因此,在文本包含字母的地方总是排除大写字体,因此我从未观察到它被使用过。哎呀。
/i
改编自
if
如果它是第一个 token 。
not
改编自
if
如果是第一个 token 。
if string1==string2
如果 string1
已解析为 not
string1 operator string2
以及所使用的运算符与字符串的精确格式之间的复杂关系。
==
是最简单的。
==
没有要求前面或后面有分隔符。字符串按字母顺序进行比较,因此您需要
/i
切换以执行不区分大小写的比较。
equ
它的家庭是事情变得更加复杂的地方。每个都必须在分隔符之前和之后。进行比较的特性取决于操作数的结构。
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"
,无论操作数的大小写。 最佳答案
正如已经通过注释所描述的,字符串是逐个字符地比较的,比较在遇到第一个不匹配的字符或最短字符串中的最后一个字符后返回它的值。
每个字符的值被转换为非语言环境特定的二进制值作为无符号字符。来自 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)
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/
1.字面常量 (1)字面意思是啥就是啥,看其表示就可以知道其值和类型。 (2)有值无名,一用来初始化变量,与一种字符相关联。 #include <stdio.h>int main()
我是一名优秀的程序员,十分优秀!