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

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

本篇文章引用的小例子来自如下链接:
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

返回列表