本帖最后由 PowerShell 于 2013-11-9 11:40 编辑
我也凑热闹来了,- <#
-
- 把当前文件夹中指定后缀名的文件中的所有类似\pos(x,y)的字符串(x和y都是数字)替换成\pos(m*x,n*y),m和n也是数字。也就是字符串\pos(x,y)中的x和y乘上一个倍数。能支持各种文件编码
-
- 比如说a.txt里
-
- 01.\pos(100,200)\pos(100,200)\pos(100,200)
-
- 02.\pos(100,200)\pos(100,200)
-
- 03.\pos(100,200)
- 复制代码x乘1.5,y乘2的话变成
-
- 01.\pos(150,400)\pos(150,400)\pos(150,400)
-
- 02.\pos(150,400)\pos(150,400)
-
- 03.\pos(150,400)
- 复制代码
- #>
-
-
- $所有要处理的文件 = Get-ChildItem -Path z:\pstemp\坛友yearharvest\*.txt # -Recurse
- # 这里指定目录名,和文件类型
-
- [system.reflection.assembly]::loadwithpartialname("System.Text") | Out-Null
- [int32]$long = 1024 * 1024 * 128 #128MB
- $大字符串 = New-Object System.Text.StringBuilder($long)
-
-
- foreach ($aaa in $所有要处理的文件)
- {
- # 正常情况下,无需编写 GetEncoding 函数。因为Get-Content将自动判断编码, 参见:
- # powershell文件编码处理之妙~]
- # http://www.bathome.net/thread-26673-1-3.html
- # 如果有不带bom头的utf8格式文档,需要指定编码utf8;如果有不带bom头的unicode格式文档,需要指定unicode。不指定的话讲被【默认地】认为是ansi格式文档。
- foreach ($bbb in $(Get-Content -LiteralPath $aaa) )
- {
- #这题并不难,难在麻烦,不停地分行,分列,计算数值,然后再组合,不过代码不长。
- $切割数组 = $bbb -split '\\pos\('
- $连成字串 = $切割数组 -join ""
-
- $切割数组2 = $连成字串 -split '\)'
- $连成字串4 = ""
- foreach ($ccc in $切割数组2)
- {
- $切割数组3 = $ccc -split ','
- if ($切割数组3.Length -gt 1)
- {
- $连成字串3 = "" + ($切割数组3[0] -as [Int64]) * 1.5 + ',' + ($切割数组3[1] -as [Int64]) * 2
- $连成字串4 = $连成字串4 + '\pos(' + $连成字串3 + ')'
- }
-
- }
- #$连成字串4
- $大字符串.AppendLine($连成字串4) | Out-Null
- }
-
- $目标文件名 = $aaa.Name + $aaa.Extension
- Add-Content -Path $目标文件名 -value $大字符串 -Encoding Unicode
- }
-
- #测试通过
复制代码 假设你的文件名是 aaa。txt 则生成aaa。txt。txt ,内含处理结果。
层层分解,每层都很简单,powershell有强大的调试工具。 powershell python都这样。
比 搜索 替换 正则 + 那些绕脑袋的古怪的单行公式 来的容易, bash awk sed 三犯a罪b团c伙 都这样。 |