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

[转载代码] PowerShell对字符串中包含数字的部分进行数值运算

[复制链接]
发表于 2013-10-21 10:13:41 | 显示全部楼层 |阅读模式
本篇文章引用的小例子来自如下链接:
http://bbs.chinaunix.net/thread-957179-1-1.html

将A12中的数值12进行减法运算, 变成A11.

PowerShell的脚本, 我用了正则表达式, 这里确实没有对应的bash处理简单, 但是我增加了一句异常处理, 这样用bash就需要先用其他手段检查字符串是否符合要求:

PS C:\> if("a12" -match "(\D+)(\d+)") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw "Input Error"}
a11
PS C:\> if("a12a" -match "^(\D+)(\d+)$") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw "Input Error"}
Input Error
At line:1 char:91
+ if("a12a" -match "^(\D+)(\d+)$") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw <<<< "Input Error"}
PS C:\>


网中人(netman)老大给出Bash解法:

$ A=a13
$ echo ${A//[0-9]}$((${A//[!0-9]}-1))
a12


throw抛出的异常是一种捕获异常的好办法, C#, java的try, catch, finally, Perl的eval等都有类似能力. 同时注意$matches保存了最近一次正则表达式匹配的信息. 如下方法可以查看该HashTable的内容:

PS C:\> $matches

Name Value
---- -----
2     12
1      a
0    a12


也许这个处理PowerShell确实代码复杂了些, 但主要还是我对PowerShell不熟悉, 也许以后我会找到更好的办法呢^^

http://blog.chinaunix.net/uid-9781829-id-1997700.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-16 22:42 , Processed in 0.012477 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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