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

[问题求助] POWERSHELL 处理特殊文件名问题

本帖最后由 terse 于 2013-11-6 23:10 编辑

http://bbs.bathome.net/viewthrea ... mp;extra=#pid139948
此贴楼主 提到文件名含 中括号 会有问题
不知怎么处理 转来此版
POWERSHELL 如遇特殊文件名 是怎样处理呢 还有其他什么字符也存在这样问题吗?
附上代码  如代码有问题 望指正
  1. $n = 2.89
  2. $Ph = "c:\test"
  3. $Ext = "txt"
  4. function Get-Encoding ($ph)
  5. {
  6. $ByteStr = Get-Content $Ph -Encoding Byte -TotalCount 3
  7. $BOM = "{0:X}{1:X}{2:X}" -f $ByteStr
  8. if ($BOM -eq "EFBBBF") { "UTF8" }
  9. Else {
  10.        $BOM = "{0:X}{1:X}" -f $ByteStr
  11.        if ($BOM -eq "FFFE") { "Unicode" }
  12.            Elseif ($BOM -eq "FEFF") {"BigEndianUnicode"}
  13.            Else {"Ascii"}
  14.        }
  15. }
  16. get-childitem "$Ph\*" -include *.$Ext | ?{
  17. $Encoding = Get-Encoding($_)
  18. (Get-Content $_ | % {
  19.     if ($_ -cmatch '(.+\\pos\()(\d+),(\d+)(.*)') {
  20.        "$($matches[1])$([int]($n * $matches[2])),$([int]($n * $matches[3]))$($matches[4])"
  21.     } else {"$_"}
  22. }) | Set-Content  -Encoding $Encoding $_
  23. }
复制代码

先谢谢 各位的热心解答
查到  -LiteralPath <string[]>
    指定项的路径。与 Path 不同,LiteralPath 的值严格按照所键入的形式使用。不会将任何字符解释为通配符。如果路径包括
    转义符,请将其括在单引号中。单引号会告知 Windows PowerShell 不要将所有字符都解释为转义序列。
现在那个贴里又出现新情况 就是  match 只能匹配一项 不能处理一行出现多个匹配的 用 replace 又不知怎样运算 本人才疏学浅   版主能否送佛送到西天

TOP

本帖最后由 terse 于 2013-11-10 15:26 编辑

这样处理了 帮看下行不
重新编辑一下规则
  1. $n = 1.5
  2. $m = 2.5
  3. $Ph = "c:\te st"
  4. $Ext = "txt"
  5. $Reg = '(?i)(\\pos\()(\d+),(\d+)'
  6. function GetEncoding ($ph)
  7. {
  8.    $ByteStr = Get-Content -LiteralPath $Ph -Encoding Byte -TotalCount 3
  9.    $BOM = "{0:X}{1:X}{2:X}" -f $ByteStr
  10.    if ($BOM -eq "EFBBBF")
  11.    {
  12.       "UTF8"
  13.    }
  14.    Else
  15.    {
  16.       $BOM = "{0:X}{1:X}" -f $ByteStr
  17.       if ($BOM -eq "FFFE")
  18.       {
  19.        "Unicode"
  20.       }
  21.       Elseif ($BOM -eq "FEFF")
  22.       {
  23.          "BigEndianUnicode"
  24.       }
  25.       Else {"Ascii"}
  26.    }
  27. }
  28. function GetReplace($a)
  29. {
  30.   $a -match $Reg |out-null
  31.   "$($matches[1])$([int]($n * [int] $matches[2])),$([int]($m * [int] $matches[3]))"
  32. }
  33. foreach ($File in Get-Childitem "$Ph\*" -include *.$Ext)
  34. {
  35.      $Encoding = GetEncoding($File)
  36.      (Get-Content -LiteralPath $File| % {
  37.           [RegEx]::Replace($_,$Reg,{param($a)GetReplace($a)})
  38.      })| Set-Content -Encoding $Encoding -LiteralPath $File
  39. }
复制代码

TOP

返回列表