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

1 楼主的提问,是有点【一次问一点问题,每次都不问全了】的意思
2 楼主每次加问的都是比较难的,比较关键的关键点.
3 正如各位用powershell回答的,powershell这种牛x语言处理之不再话下:
3.1 不管你啥编码,编写一小段函数 【Get-Encoding 】都能转换,识别,打开------powershell这盘菜大家逐渐吃出好味道来了么?我很欣慰呀呵呵.
3.2 带有中括号的文件,如 [a].txt 就用 -LiteralPath
3.3 powershell计算带小数点的数值,也不用多说了吧.
3.4 powershell 内置.net正则,查找替换无忧.

4 我不会答问题,也不会编码,只会吹,哈哈~~
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

本帖最后由 PowerShell 于 2013-11-9 11:40 编辑

我也凑热闹来了,
  1. <#
  2. 把当前文件夹中指定后缀名的文件中的所有类似\pos(x,y)的字符串(x和y都是数字)替换成\pos(m*x,n*y),m和n也是数字。也就是字符串\pos(x,y)中的x和y乘上一个倍数。能支持各种文件编码
  3. 比如说a.txt里
  4. 01.\pos(100,200)\pos(100,200)\pos(100,200)
  5. 02.\pos(100,200)\pos(100,200)
  6. 03.\pos(100,200)
  7. 复制代码x乘1.5,y乘2的话变成
  8. 01.\pos(150,400)\pos(150,400)\pos(150,400)
  9. 02.\pos(150,400)\pos(150,400)
  10. 03.\pos(150,400)
  11. 复制代码
  12. #>
  13. $所有要处理的文件 =  Get-ChildItem -Path z:\pstemp\坛友yearharvest\*.txt   # -Recurse
  14. # 这里指定目录名,和文件类型
  15. [system.reflection.assembly]::loadwithpartialname("System.Text") | Out-Null
  16. [int32]$long = 1024 * 1024 * 128 #128MB
  17. $大字符串 = New-Object System.Text.StringBuilder($long)
  18. foreach   ($aaa   in   $所有要处理的文件)
  19. {
  20. # 正常情况下,无需编写 GetEncoding 函数。因为Get-Content将自动判断编码, 参见:
  21. #  powershell文件编码处理之妙~]
  22. #  http://www.bathome.net/thread-26673-1-3.html
  23. #  如果有不带bom头的utf8格式文档,需要指定编码utf8;如果有不带bom头的unicode格式文档,需要指定unicode。不指定的话讲被【默认地】认为是ansi格式文档。
  24. foreach   ($bbb   in  $(Get-Content -LiteralPath $aaa)  )
  25. {
  26. #这题并不难,难在麻烦,不停地分行,分列,计算数值,然后再组合,不过代码不长。
  27. $切割数组 =  $bbb -split '\\pos\('
  28. $连成字串 = $切割数组   -join   ""
  29. $切割数组2 =  $连成字串   -split  '\)'
  30. $连成字串4 = ""
  31. foreach ($ccc  in  $切割数组2)
  32. {
  33. $切割数组3 =  $ccc  -split ','
  34. if  ($切割数组3.Length -gt 1)
  35. {
  36. $连成字串3 =  "" + ($切割数组3[0] -as [Int64]) * 1.5 +  ',' + ($切割数组3[1] -as [Int64]) * 2
  37. $连成字串4 =  $连成字串4 + '\pos(' + $连成字串3 + ')'
  38. }
  39. }
  40. #$连成字串4
  41. $大字符串.AppendLine($连成字串4) | Out-Null
  42. }
  43. $目标文件名 = $aaa.Name + $aaa.Extension
  44. Add-Content  -Path $目标文件名  -value $大字符串 -Encoding Unicode
  45. }
  46. #测试通过
复制代码
假设你的文件名是 aaa。txt 则生成aaa。txt。txt ,内含处理结果。


层层分解,每层都很简单,powershell有强大的调试工具。 powershell python都这样。
比 搜索 替换 正则 + 那些绕脑袋的古怪的单行公式 来的容易, bash awk sed 三犯a罪b团c伙 都这样。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表