标题: [系统相关] 批处理如何获取变量值里的数字 [打印本页]
作者: 56335571 时间: 2023-8-8 21:42 标题: 批处理如何获取变量值里的数字
比如用户名为:ad123bc456这样的随机数字, 如何只提取%USERNAME%里面的数字,使结果为123456.谢谢赐教
作者: TAT 时间: 2023-8-8 21:58
遍历字符串,当为0123456789之一时取出并追加
作者: Five66 时间: 2023-8-8 22:43
一个一个截取,然后比较,是数字的就合并
作者: 77七 时间: 2023-8-9 00:32
参考:
批处理提取变量中的数字
作者: aloha20200628 时间: 2023-8-9 00:45
- @echo off
- setlocal enabledelayedexpansion
- set "pwd=ad654bc321" &set "_pwd=!pwd!"
- for %%n in (0,1,2,3,4,5,6,7,8,9) do set "_pwd=!_pwd:%%n=,!"
- for %%s in (!_pwd!) do set "pwd=!pwd:%%s=!"
- echo,!pwd!
- endlocal&exit/b
复制代码
作者: qixiaobin0715 时间: 2023-8-9 08:36
代码有bug:
如果pwd=b654bc321呢?
最直接的办法是将数字0-9均设置为类似“#单个数字=0”的变量,顺序读取每个字符,判断“#所取字符”是否被定义。
作者: hfxiang 时间: 2023-8-9 09:08
本帖最后由 hfxiang 于 2023-8-9 09:11 编辑
回复 1# 56335571
用第3方工具gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe )比较简单:- echo;ad123bc456|gawk -v"RS=[0-9]+" "{printf RT}"
复制代码
作者: qixiaobin0715 时间: 2023-8-9 09:35
本帖最后由 qixiaobin0715 于 2023-8-9 09:51 编辑
如果是单独一行字符串的话:- @echo off
- set "pwd=b123bc456"
- for /l %%i in (0,1,9) do set #%%i=true
- set n=0
- :o
- call set CH=%%pwd:~%n%,1%%
- if defined #%CH% set var=%var%%CH%
- set /a n+=1
- if defined CH goto :o
- echo,%var%
- pause
复制代码
上面代码,变量值中不能含有&等特殊字符,如何处理这种情况不得而知。
作者: aloha20200628 时间: 2023-8-9 10:02
订正5楼代码》改为纯P的“递归”结构应该就可以了...
- @echo off
- setlocal enabledelayedexpansion
- set "pwd=b654bc321"
- :[Loop]
- set "_pwd=!pwd!"
- set "pwd_=!pwd!"
- for %%n in (0,1,2,3,4,5,6,7,8,9) do set "_pwd=!_pwd:%%n=,!"
- echo,!_pwd!
- for %%s in (!_pwd!) do set "pwd=!pwd:%%s=!"
- if "!pwd!"=="!pwd_!" (goto[end]) else (goto[Loop])
- :[end]
- echo,!pwd!
- endlocal&exit/b
复制代码
作者: qixiaobin0715 时间: 2023-8-9 13:22
本帖最后由 qixiaobin0715 于 2023-8-9 15:13 编辑
- @echo off
- set "pwd=0b123b=c456p;i987"
- setlocal enabledelayedexpansion
- for %%i in (%pwd%) do set var=!var!%%i
- set pwd1=a%var%a
- set pwd2=a%var%a
- for /l %%i in (0,1,9) do set pwd1=!pwd1:%%i= !
- for %%i in (%pwd1%) do (
- set pwd2=1!pwd2:*%%i=!
- set /a n=pwd2
- set n=!n:~1!
- if defined n set m=!m!!n!
- )
- if defined m (echo,%m%) else (No Numbers)
- pause
复制代码
代码第4-6行是对变量值进行规整;后面与5楼代码大同小异,思路基本相同。
如果含有(&<等)特殊字符则代码无效。
作者: Batcher 时间: 2023-8-9 15:04
回复 1# 56335571
参考:http://bbs.bathome.net/thread-64867-1-1.html
作者: 77七 时间: 2023-8-9 16:30
2、3楼方法挺好的,逐个判断。- @echo off
- for /f "useback delims=" %%a in ("%~f0") do set str=%%a
- setlocal enabledelayedexpansion
- set n=0
- :loop
- (echo=!str:~%n%,1!|findstr [0-9] && set str2=!str2!!str:~%n%,1!)1>nul 2>nul
- if "!str:~%n%,1!" neq "" (
- set /a n+=1
- goto :loop
- )
- echo !str! =^> !str2!
- endlocal
- pause
- exit
- a!@#d1$%;'":^2&*3b(c<,.>/?4_+5{}|%a%b6\
复制代码
作者: 56335571 时间: 2023-8-9 19:35
回复 4# 77七
已解决,感谢随风大神的案例
作者: jszw666 时间: 2023-8-21 12:09
向各位学习 变量 。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |