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

[数值计算] 讨论:批处理命令FINDSTR通配符的限定输入!

[复制链接]
 楼主| 发表于 2025-8-31 01:55:41 | 显示全部楼层
本帖最后由 jiavip 于 2025-8-31 02:32 编辑

回复 2# aloha20200628
回复 5# HalloWord
回复 8# 77七
  1. @Echo off
  2. set sa=1 +1 ++1 a +a ++a 2a a2 -2a --2a 2- -a2 -2- -22 +3 -3 *3 /3 +44 -44 *44 /44
  3. For %%i in (%sa%) do (
  4. Echo.========================  %%i   
  5. Echo.%%i| FindStr /r "[0-9+\-/*]">nul&& Echo.方案.1___ %%i _9楼
  6. Echo.%%i| FindStr "^[+\-/*].[0-9]*$">Nul && Echo.方案.2___ %%i
  7. Echo.%%i| FindStr "^[+\-/*][0-9]*$">Nul && Echo.方案.3___ %%i
  8. Echo.%%i| FindStr "+"|FindStr "\-"|FindStr "\*"|FindStr "\/"|FindStr /r "[0-9]">nul&& Echo.方案.4___ %%i
  9. Echo.%%i| FindStr  "+" | FindStr /r "\-" | FindStr /r "\*" | FindStr /r "\/" | FindStr /r "[0-9]">nul&& Echo.方案.5___ %%i _2楼
  10. Echo.%%i| FindStr "^[+^-/*].[0-9]*$">Nul && Echo.方案.6___ %%i
  11. Echo.%%i| FindStr "^[-+/*?0-9]*$">Nul && Echo.方案.7___ %%i
  12. Echo.%%i| FindStr "^[-+/*]*[0-9]*$">Nul && Echo.方案.8___ %%i
  13. Echo.%%i| FindStr "+"|FindStr "\-"|FindStr "\*"|FindStr "\/"|FindStr /r "[0-9]">nul&& Echo.方案.9___ %%i _11楼
  14. )
  15. pause>nul
复制代码
结论 :方案3 比较靠谱,,,,明白FindStr 转义符 \ 和普通情况下 的 ^ 是不一样D,多点讨论还是有收获D嘛,,,,,,
发表于 2025-8-31 14:28:10 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-8-31 14:34 编辑

回复 16# jiavip

很好奇楼主的 '靠谱' 标准是啥?是要匹配一个可被 set/a 函数认可的字符串吗?
以下代码可匹配成功16楼定义的 %sa% 变量所包含的全部字段(其中 *3 和 44* 除外,因其包含的 * 字符在 for %%i in (...) 句式中会被系统转义扩展为 '路径文件名通配符' 而导致无效)

  1. @echo off
  2. set "sa=1 +1 ++1 a +a ++a 2a a2 -2a --2a 2- -a2 -2- -22 +3 -3 *3 /3 +44 -44 *44 /44"
  3. for %%i in (%sa%) do (
  4.    echo,%%i
  5.    echo,%%i|findstr /rb "[+\-]*[a-z]*[0-9]*[\-+/*]*">nul&&@echo,匹配成功
  6.    echo,)
  7. pause&exit/b
复制代码
以上代码虽可成功匹配,但若用 set/a 函数检查 %sa% 全部字段(含*字符除外),其中有些会被报错。
用以下代码可成功匹配那些能被 set/a 函数认可的 %sa% 字段...

  1. @echo off
  2. set "sa=1 +1 ++1 a +a ++a 2a a2 -2a --2a 2- -a2 -2- -22 +3 -3 *3 /3 +44 -44 *44 /44"
  3. for %%i in (%sa%) do (
  4.    echo,%%i
  5.    echo,%%i|findstr /rb /c:"[+\-]*[a-z]*[0-9][0-9]*[\-+/*]*[0-9][0-9]*$" /c:"[+\-]*[a-Z]*[0-9]*$">nul&&@echo,匹配成功
  6.    set "v=" &set/a v=%%i&&call echo,运算结果:%%v%%
  7.    echo,)
  8. pause&exit/b
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:10 , Processed in 0.015711 second(s), 6 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表