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

[文本处理] [分享]批处理只保留字符串里面的数字

【问题描述】

怎么提取字符串里面的数字,删除其它字符,
比如:123Bat456Home789论坛
结果:123456789
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

【解决方案】

test_1.bat
这个代码有问题,请参考6楼的方法。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "StrOld=123Bat456Home789论坛"
  4. set "StrTmp=%StrOld%"
  5. for /l %%i in (0 1 9) do (
  6.     set "StrTmp=!StrTmp:%%i= !"
  7. )
  8. set "StrNew=%StrOld%"
  9. for %%i in (!StrTmp!) do (
  10.     set StrNew=!StrNew:%%i=!
  11. )
  12. echo,!StrNew!
  13. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

test_2.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=123Bat456Home789论坛"
  4. set "num="
  5. :Loop
  6. set "char=%str:~0,1%"
  7. if %char% geq 0 (
  8.     if %char% leq 9 (
  9.         set "num=!num!%char%"
  10.     )
  11. )
  12. set str=%str:~1%
  13. if "%str%" neq "" (
  14.     goto :Loop
  15. )
  16. echo,%num%
  17. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

test_3.bat
  1. @echo off
  2. set "StrOld=123Bat456Home789论坛"
  3. for /f "delims=" %%i in ('powershell "'%StrOld%' -replace '[^\d]*',''"') do (
  4.     set "StrNew=%%i"
  5. )
  6. echo,%StrNew%
  7. pause
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

来个第3方工具gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )的实现方法
  1. echo;123Bat456Home789 论坛|gawk -vOFS="" -F"[^0-9]+" "$1=$1"
复制代码

TOP

本帖最后由 qixiaobin0715 于 2023-1-8 10:29 编辑

回复 2# Batcher
2楼代码有bug。如果对于数字分隔的非数字字段来说,存在前面字段包含于后面的字段,就会出现问题,比如:
  1. set "StrOld=123Bat456BatHome789论坛"
复制代码
前面的Bat字段包含于后面的BatHome字段,处理后的结果为:
  1. 123456Home789
复制代码
这样应当可以:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "StrOld=123Bat456BatHome789论坛"
  4. for /l %%i in (0 1 9) do (
  5.     set "StrOld=!StrOld:%%i= %%i !"
  6. )
  7. for %%i in (!StrOld!) do (
  8.     if %%i geq 0 (
  9.         if %%i leq 9 (
  10.             set StrNew=!StrNew!%%i
  11.         )
  12.     )
  13. )
  14. echo,!StrNew!
  15. pause
复制代码
1

评分人数

TOP

回复 5# hfxiang


再来个sed
  1. echo 123Bat456Home789论坛 | sed "s/[^0-9]//g"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表