[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[系统相关] 批处理如何获取变量值里的数字

比如用户名为:ad123bc456这样的随机数字, 如何只提取%USERNAME%里面的数字,使结果为123456.谢谢赐教

遍历字符串,当为0123456789之一时取出并追加

TOP

一个一个截取,然后比较,是数字的就合并

TOP

bat小白,请多指教!谢谢!

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "pwd=ad654bc321" &set "_pwd=!pwd!"
  4. for %%n in (0,1,2,3,4,5,6,7,8,9) do set "_pwd=!_pwd:%%n=,!"
  5. for %%s in (!_pwd!) do set "pwd=!pwd:%%s=!"
  6. echo,!pwd!
  7. endlocal&exit/b
复制代码
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

代码有bug:
如果pwd=b654bc321呢?
最直接的办法是将数字0-9均设置为类似“#单个数字=0”的变量,顺序读取每个字符,判断“#所取字符”是否被定义。

TOP

本帖最后由 hfxiang 于 2023-8-9 09:11 编辑

回复 1# 56335571
用第3方工具gawk( http://bcn.bathome.net/tool/5.1.0/gawk.exe )比较简单:
  1. echo;ad123bc456|gawk -v"RS=[0-9]+" "{printf RT}"
复制代码

TOP

本帖最后由 qixiaobin0715 于 2023-8-9 09:51 编辑

如果是单独一行字符串的话:
  1. @echo off
  2. set "pwd=b123bc456"
  3. for /l %%i in (0,1,9) do set #%%i=true
  4. set n=0
  5. :o
  6. call set CH=%%pwd:~%n%,1%%
  7. if defined #%CH% set var=%var%%CH%
  8. set /a n+=1
  9. if defined CH goto :o
  10. echo,%var%
  11. pause
复制代码
上面代码,变量值中不能含有&等特殊字符,如何处理这种情况不得而知。

TOP


订正5楼代码》改为纯P的“递归”结构应该就可以了...

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "pwd=b654bc321"
  4. :[Loop]
  5. set "_pwd=!pwd!"
  6. set "pwd_=!pwd!"
  7. for %%n in (0,1,2,3,4,5,6,7,8,9) do set "_pwd=!_pwd:%%n=,!"
  8. echo,!_pwd!
  9. for %%s in (!_pwd!) do set "pwd=!pwd:%%s=!"
  10. if "!pwd!"=="!pwd_!" (goto[end]) else (goto[Loop])
  11. :[end]
  12. echo,!pwd!
  13. endlocal&exit/b
复制代码

TOP

本帖最后由 qixiaobin0715 于 2023-8-9 15:13 编辑
  1. @echo off
  2. set "pwd=0b123b=c456p;i987"
  3. setlocal enabledelayedexpansion
  4. for %%i in (%pwd%) do set var=!var!%%i
  5. set pwd1=a%var%a
  6. set pwd2=a%var%a
  7. for /l %%i in (0,1,9) do set pwd1=!pwd1:%%i= !
  8. for %%i in (%pwd1%) do (
  9.     set pwd2=1!pwd2:*%%i=!
  10.     set /a n=pwd2
  11.     set n=!n:~1!
  12.     if defined n set m=!m!!n!
  13. )
  14. if defined m (echo,%m%) else (No Numbers)
  15. pause
复制代码
代码第4-6行是对变量值进行规整;后面与5楼代码大同小异,思路基本相同。
如果含有(&<等)特殊字符则代码无效。

TOP

回复 1# 56335571


    参考:http://bbs.bathome.net/thread-64867-1-1.html
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

2、3楼方法挺好的,逐个判断。
  1. @echo off
  2. for /f "useback delims=" %%a in ("%~f0") do set str=%%a
  3. setlocal enabledelayedexpansion
  4. set n=0
  5. :loop
  6. (echo=!str:~%n%,1!|findstr [0-9] && set str2=!str2!!str:~%n%,1!)1>nul 2>nul
  7. if "!str:~%n%,1!" neq "" (
  8. set /a n+=1
  9. goto :loop
  10. )
  11. echo !str!  =^>  !str2!
  12. endlocal
  13. pause
  14. exit
  15. a!@#d1$%;'":^2&*3b(c<,.>/?4_+5{}|%a%b6\
复制代码
bat小白,请多指教!谢谢!

TOP

回复 4# 77七
已解决,感谢随风大神的案例

TOP

向各位学习  变量 。

TOP

返回列表