标题: [其他] 【已解决】批处理获取变量最后一位是数字还是字母,如何用IF ELSE [打印本页]
作者: noender 时间: 2019-8-9 15:31 标题: 【已解决】批处理获取变量最后一位是数字还是字母,如何用IF ELSE
本帖最后由 noender 于 2019-8-21 15:11 编辑
set /p p=
echo %p%|findstr "^[a-Z]" &&echo 字母||echo 非字母开头
echo %p%|findstr "^[0-9]*$" &&echo 纯数字
mxxcgzxxx大神语句
上面的代码是论坛里别人贴出来的。。上面的功能是首字的判断。。 我下面修改了一下。
echo %p%|findstr /i "\d$" &&echo 字母||echo 非字母开头
这个是未字的判断。。。请问一下。。里面增加条件语句。。IF与ELSE。要怎么增加,,我想在判断得到是字母的话。。GOTO执行。。。。判断得到是数字的话GOTO执行。。
作者: Batcher 时间: 2019-8-9 15:41
- echo %p%|findstr /i "\d$"
- if errorlevel 1 (
- echo 非字母开头
- goto :xx
- ) else (
- echo 字母
- goto :oo
- )
复制代码
作者: noender 时间: 2019-8-10 11:02
回复 2# Batcher
Batcher 老大,,,谢谢你的回复,,我去试试,,,我想问一下。。这个goto :xx 与goto xx。。这个两者有什么区别,,,,,,,,,,,,,,,,,,,,,,,应该是一样的效果的吧。。
作者: xczxczxcz 时间: 2019-8-10 14:40
echo %p%|findstr "[0-9]$" &&echo 是数字||echo 非数字
作者: noender 时间: 2019-8-11 09:55
回复 2# Batcher
大神。。运行后。。输入数字是。。非字母。没有错,,,,,,,,,,,,,,但是输入字母。。还是提示非字母。。。。不知道是为什么。。
作者: Batcher 时间: 2019-8-11 16:05
回复 5# noender
因为顶楼你改的代码是错的,findstr不支持\d这种正则
作者: noender 时间: 2019-8-12 09:26
回复 6# Batcher
echo %p%|findstr /i "\d$" &&echo 字母||echo 非字母开头
但是这样是可以的呢。我测试过呢。。。哎。。哪按着你上面给我的IF语句。。是可以实现的吗。
作者: noender 时间: 2019-8-12 09:28
回复 6# Batcher
大大,,哪请问一下。你在2楼帮我更改过的代码。。需要怎么修改一下才可以实现。。我上面提过的条件的呢。。
作者: Batcher 时间: 2019-8-12 09:29
回复 7# noender
请把你自己写的这个命令的测试用例、测试结果发出来我也试试
作者: noender 时间: 2019-8-12 10:03
回复 9# Batcher
echo %p%|findstr /i "\d$" &&echo 字母||echo 非字母开头
这句我已经测试过了。一切OK的。。。你上次给我的2楼的哪个。。我也测试过了。。一直是提示。非字母。。。还是老大你是需要我提供图?
作者: Batcher 时间: 2019-8-12 10:11
回复 10# noender
不知道你是怎么测试的。我测试你的命令结果如下显然是错误的:
C:\>echo 123\d|findstr /i "\d$" &&echo 字母||echo 非字母开头
123\d
字母
C:\>echo abc123|findstr /i "\d$" &&echo 字母||echo 非字母开头
非字母开头
作者: noender 时间: 2019-8-12 10:27
回复 11# Batcher
好像也是错的。。等我去开一下。上次用过的电脑。我去测试一下先。。我记得很清楚的。。是可以的。。。。
版本。。。还有一个问题。。请教一下。。。。
A.EXE 直接运行与 START A.EXE 运行 是不是前者,是运行后如果有留着窗口需要关的话。应该是会一直停留着。等着我们点一下的吧。。。。后者是。。运行后。。窗口是等着我们点。。但是批处理是继续往下走下去了。??
作者: Batcher 时间: 2019-8-12 12:52
回复 12# noender
是的。
作者: noender 时间: 2019-8-20 17:35
回复 9# Batcher
今天总于是忙完了。。我又测试了是可以的。。但是大神你的IF中是不行的。。我的语句是如下的。。
set p=1a445a1d1
echo %p%|findstr /i "\d$" &&echo 字母||echo 数字
作者: Batcher 时间: 2019-8-20 19:26
回复 14# noender
不知道你的语句想表达什么意思,正如6楼说过的findstr不支持\d这种语法,你坚持用它是无法得到正确结果的。
作者: noender 时间: 2019-8-21 08:20
回复 15# Batcher
Batcher 老大,,就是说得到一个值。。可以判断出这值的最后一位是数字还是字母。有这个效果就行了。。不过需要IF语句。。谢谢老大了。
作者: Batcher 时间: 2019-8-21 08:46
回复 14# noender
你试过下面这个测试用例不,确定你的写法可以判断出“最后一位是数字还是字母”吗?
C:\>set p=1A
C:\>echo %p%|findstr /i "\d$" &&echo 字母||echo 数字
数字
作者: noender 时间: 2019-8-21 11:38
回复 17# Batcher
真是奇怪。。我把原来的字。改了后。。也是错误了。。看来。。是真的不行的。。也不知道原来的为什么可以。见鬼了。
作者: noender 时间: 2019-8-21 11:40
回复 15# Batcher
大大。。。。你把你的 set p=1a445a1d1 这个改成这个。。你看就是对了。。。怪头。为什么这个数值是显示正确的呢。哈。
作者: noender 时间: 2019-8-21 11:41
应该整体是错的。。也有可能我上面的哪一串数字。本身就是有问题的。只是显示出来是对的。也有可能是假像吧。。是不是我的输入显示错误导致误看了。。。
作者: noender 时间: 2019-8-21 11:42
回复 17# Batcher
大神。。哪你可以帮我写一个我需要的。。。判断数值的最后一位是字母还是数字的。。BAT语句的吗。。。带IF的。。。。。
作者: Batcher 时间: 2019-8-21 12:36
回复 21# noender - @echo off
- set "p=1a445a1d1"
- if %p:~-1% geq 0 (
- if %p:~-1% leq 9 (
- echo 最后一位是数字
- ) else (
- echo 最后一位不是数字
- )
- ) else (
- echo 最后一位不是数字
- )
- pause
复制代码
作者: Batcher 时间: 2019-8-21 12:53
- set p=1a445a1d1
- echo %p%|findstr "[0-9]$" >nul && echo 最后一位是数字 || echo 最后一位不是数字
复制代码
作者: noender 时间: 2019-8-21 15:10
回复 23# Batcher
谢谢大神了。。。。。。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |