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


    喜闻乐见!有Linux多方便啊,到Windows下面瞎折腾啥。

TOP

powershell交流宗宗主,我来也~~
谁敢说linux强win不行?尤其是说win8不行?!滚粗~~~~
详细说出你的需求,我来给你写脚本。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

http://www.bathome.net/thread-25683-1-3.html  powershell中有世界上最好的编码处理技术
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 17# PowerShell


    版主能解决我这个贴里的问题不?
    代码和需求都已经写在一楼了。
    遇到的问题就是编码不一致,目标文件是“以 UTF-8 无 BOM 格式编码”,并且有一万多个。
    用一楼的bat脚本替换后,中文变成了乱码。。。。

TOP

本帖最后由 apang 于 2013-10-1 21:26 编辑

保存为test.vbs,与"替换内容集.txt"存放在同一位置(替换内容集.txt必须是ansi编码),试试
  1. On Error Resume Next
  2. SrcDir = Left(WScript.ScriptFullName,InstrRev(WScript.ScriptFullName,"\")-1)
  3. ListFile = SrcDir & "\替换内容集.txt"
  4. Set fso = CreateObject("Scripting.FileSystemObject")
  5. Set objFile = fso.OpenTextFile(ListFile,1)
  6. Do Until objFile.AtEndofStream
  7.     strLine = objFile.ReadLine
  8.     If InStr(strLine,",") Then
  9.         ReDim PreServe ar(1,i)
  10.         ar(0,i)=Split(strLine,",")(0) : ar(1,i)=Split(strLine,",")(1)
  11.         i = i + 1
  12.     End If
  13. Loop
  14. GetSubFolder SrcDir
  15. Sub GetSubFolder(SubFolder)
  16.     For Each file in fso.GetFolder(SubFolder).Files
  17.         If LCase(Right(file,4)) = ".txt" Then
  18.             If Not LCase(file) = LCase(ListFile) Then
  19.                 WriteToFile file,"UTF-8"
  20.             End If
  21.         End If
  22.     Next
  23.     For Each folder in fso.GetFolder(SubFolder).SubFolders
  24.         GetSubFolder folder
  25.     Next
  26. End Sub
  27. Sub WriteToFile(file,CharSet)
  28.     With CreateObject("Adodb.Stream")
  29.         .Type = 2
  30.         .Mode = 3
  31.         .CharSet = CharSet
  32.         .Open
  33.         .LoadFromFile file
  34.         text = .Readtext
  35.         For j = 0 to i - 1
  36.             text = RePlace(text,ar(0,j),ar(1,j))
  37.         Next
  38.         .Position = 0
  39.         .CharSet = CharSet
  40.         .WriteText text
  41.         .SetEOS
  42.         .SaveToFile file,2
  43.         .Close
  44.     End With
  45. End Sub
复制代码
受刺激了,还是改一下。。。

TOP

1 由于你没有提供测试文件,所以也没法测试,总之这是试用版,搞坏你数据概不负责,你自己做好备份。(脚本我简单跑了下,没啥问题)
2 for坛友cktest00012.ps1          下载。ps1 脚本,并把前面的变量改成你真实的环境,保存。
3 管理员cmd运行下列命令:
rem 用管理员权限的cmd命令行中,运行下列命令,开启powershell的.ps1脚本运行权限:
"C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -command "Set-ExecutionPolicy -ExecutionPolicy  bypass"
"C:\WINDOWS\syswow64\windowspowershell\v1.0\powershell.exe" -command "Set-ExecutionPolicy -ExecutionPolicy  bypass"
4 开启powershell。exe ,打入 cd  你脚本保存的目录。然后打for,然后按tab,即可出现 for坛友cktest00012.ps1 敲回车即可。

5 我想说这题很难,难在性能,理由如下:
5.1 很明显打开一个文件,然后遍历【替换内容集】中的条目,然后替换,性能高。而对一对替换内容,遍历文件,性能低。
5.2 我不知道bat sed等能否一次【在内存中!】替换多个内容。如果不能,就是替换一次,保存一遍,虽然有操作系统缓存会加快很多速度。但也不如直接在内存中遍历替换内容集性能高。尤其是【替换内容集】中的条目比较多的时候。
5.3 我这个脚本很明确是在内存中操作。尤其是【替换内容集】中的条目比较多的时候。我认为我的脚本性能最好,而且我这脚本还能性能优化。欢迎脚本pk呀。

6 过节了,总要休息,甚至杂事纷呈,没空泡坛子了,回复不及时莫怪。
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

回复 4# cktest0001


    下载软件Notepad++,打开Notepad++,编码-转为ANSI编码

TOP

我认为我的脚本性能最好,而且我这脚本还能性能优化。欢迎脚本pk呀。

我也认为我的脚本天下第一。问:天下第一的脚本长啥样?答:天热蚊子多,我想想先。

相声 小品 魔术杂技
评书 笑话 说唱艺术
东西南北中
君请看 曲苑杂坛

TOP

返回列表