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


    只是刚好我拿来测试的几个文件编码都不相同,能解决的话最好,不能或者解决起来麻烦的话就算了

TOP

回复 15# terse


    昨天忘了看,今天又有事现在才回来,多谢了,还有楼上的几位也是

TOP

回复 15# terse


    试了一下,发现文件名里有中括号的就会报一大堆错,不过这倒没什么关系,改下文件名就是了

TOP

回复 18# yearharvest
新建 ! % ^ & 文件夹 (2)).txt
新建 ! % ^ & 文件夹 (2).txt
将你的附件 另存为上面两个文件 没提示错误
我再看看

TOP

本帖最后由 yearharvest 于 2013-11-5 21:43 编辑

是中括号,比如把文件命名成  [a].txt

TOP

回复 20# yearharvest
如此含中括号文件名还真不知道怎么处理 我发去PS版看下
不知还存在其他问题不  比如编码

TOP

回复 16# yearharvest


    13楼的代码有问题吗?

TOP

回复 21# terse


    编码没什么问题,也没发现其他问题

TOP

回复 22# DAIC


    测试一下没发现什么问题

TOP

本帖最后由 yearharvest 于 2013-11-7 23:42 编辑

回复 21# terse


    刚刚又发现一个问题,就是一行匹配多个的话只会处理最后一个。看代码是通过捕获组修改值然后字符串拼接起来,这样的话确实只能一行处理一个,像13的用replace函数的话就没问题。

    比如文件内容下面这种情况:
  1. \pos(100,200)\pos(100,200)\pos(100,200)
  2. \pos(300,400)\pos(300,400)
  3. \pos(500,600)
复制代码

TOP

回复 25# yearharvest


    你这个人还真是奇葩,把你最终的要求更新到顶楼,很难吗?
像你这样没完没了地提要求,是对回复者的不尊重,说严重点,就是无理取闹

TOP

本帖最后由 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

这确实是我的不对,麻烦各位了,这贴就这样结了吧,后面的我自己试着改改

TOP

回复 28# yearharvest
http://bbs.bathome.net/thread-27238-1-1.html
虽然结贴了 还是PS 写了个 就不再这里贴了 链接里看下吧

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

返回列表