Board logo

标题: [文本处理] 紧急求助替换php、html等文件里的汉字会乱码 [打印本页]

作者: zouming16888    时间: 2020-2-24 01:43     标题: 紧急求助替换php、html等文件里的汉字会乱码

  1. rem 定义要替换的新旧字符串
  2. cd %cd%
  3. set strOld=www.baidu.com
  4. set strNew=www.qq.com
  5. for /f "tokens=*" %%i in ('dir *.txt,*.php,*.jsp,*.ini,*.html,*.mxl,*.css,*.js,*.tpl,*.json,*.config /S /B') do (
  6.     set "var=%%i"
  7.     setlocal enabledelayedexpansion
  8.     if not !var!.==. (
  9.     for /f "usebackq tokens=*" %%j in ("!var!") do (
  10.         set "tmp=%%j"
  11.         if not !tmp!.==. (
  12.           set "tmp=!tmp:%strOld%=%strNew%!"
  13.           echo !tmp!>>temp.txt
  14.         )
  15.     )
  16.     move temp.txt "!var!"
  17.     endlocal
  18.     )
  19. )
复制代码
经过测试 只有 txt文本文件里的 汉字不会乱码, php  html   .config  等这些文件 里的汉字 都会乱码,

经过测试 解决方法  加个 Chcp 65001  就解决了 哎哎
作者: red2020    时间: 2020-2-24 01:51

这种简单问题还用注册个账号询问批处理吗?
作者: zouming16888    时间: 2020-2-24 01:55

回复 2# red2020

用啊 不会不得问问吗
作者: zouming16888    时间: 2020-2-24 06:57

不只是编码错误, 还会把 <!--  --> 其中的 !  叹号删除, 包括 for 开头的 英文也会给删除

大神们 帮帮孩子吧
作者: flashercs    时间: 2020-2-24 11:33

(1)把下面的批处理脚本保存编码格式为utf8-nobom,一定不能用 记事本编辑.
(2)所有处理的文件一律改用utf8编码.
  1. ::替换内容
  2. rem 定义要替换的新旧字符串
  3. chcp 65001
  4. cd %cd%
  5. set strOld=www.baidu.com
  6. set strNew=www.qq.com
  7. for /f "tokens=*" %%i in ('dir *.txt,*.php,*.jsp,*.ini,*.html,*.mxl,*.css,*.js,*.tpl,*.json,*.config /S /B') do (
  8.     set "var=%%i"
  9.     setlocal enabledelayedexpansion
  10.     if not !var!.==. (
  11.     for /f "usebackq tokens=*" %%j in ("!var!") do (
  12.         set "tmp=%%j"
  13.         if not !tmp!.==. (
  14.           set "tmp=!tmp:%strOld%=%strNew%!"
  15.           echo !tmp!>>temp.txt
  16.         )
  17.     )
  18.     move temp.txt "!var!"
  19.     endlocal
  20.     )
  21. )
复制代码

作者: zaqmlp    时间: 2020-2-24 13:26

  1. <# :
  2. cls
  3. @echo off
  4. set info=互助互利,支付宝扫码头像,感谢赞助
  5. rem 有问题,可加QQ956535081及时沟通
  6. title %info%
  7. set "rootpath=%~dp0"
  8. if "%rootpath:~-1%" equ "\" (set "rootpath=%rootpath:~,-1%")
  9. cd /d "%rootpath%"
  10. powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%rootpath%'"
  11. echo;%info%
  12. pause
  13. exit
  14. #>
  15. $oldstr='www.baidu.com';
  16. $newstr='www.qq.com';
  17. #原文件编码为ANSI/GB2312, 则改为[Text.Encoding]::Default
  18. $enc=[Text.Encoding]::UTF8;
  19. $ext=@('.php', '.jsp', '.ini', '.html', '.xml', '.css', '.js', '.tpl', '.json', '.config');
  20. $files=@(dir -liter $args[0] -recurse|?{($ext -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
  21. for($i=0;$i -lt $files.length;$i++){
  22.     write-host $files[$i].FullName;
  23.     $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
  24.     $text=$text.replace($oldstr, $newstr);
  25.     [IO.File]::WriteAllText($files[$i].FullName, $text, $enc);
  26. }
复制代码

作者: zouming16888    时间: 2020-2-24 20:16

回复 5# flashercs

感谢老板 你这个方法我试过了,确实不会乱码了, 但是还是会把 <!--这个里的叹号给自动删除 -->

还有里面的  <!-- For more information on Entity Framework configuration, visit 这一段 For 开头的 会被都删掉
作者: zouming16888    时间: 2020-2-24 20:19

回复 6# zaqmlp

感谢帮忙 我电脑是 win7系统 使用你的这个发现是正常的 不会乱码 也不会乱删除 for 开头的英文  只是出个错误提示 不知道有啥用

还有就是 替换完  会把 UTF-8 无 BOM格式的 文件 都变成带 BOM 的编码。

原文件是 无 BOM格式 替换完的就变成 图片这种了
作者: zaqmlp    时间: 2020-2-24 21:11

回复 8# zouming16888

rem在第5行,报错在第一行,说明你没有完整复制代码

无bom
$enc=New-Object System.Text.UTF8Encoding $False;

要感谢还是红包实际点
作者: zouming16888    时间: 2020-2-24 21:27

回复 9# zaqmlp

好的老板 , 我查看发现 原文件 web.config 文件默认是带 BOM ,PHP文件是不带 BOM

替换后 都变为 不带 BOM 或者都带 BOM 了, 这个能根据原文件编码 自动识别吗?

稍后我给支付宝绑个卡 ,小红包感谢!或者给我个微信码 微信里有钱
作者: zaqmlp    时间: 2020-2-24 21:43

回复 10# zouming16888


配合修改扩展名  $ext=……
作者: flashercs    时间: 2020-2-24 23:58

本帖最后由 flashercs 于 2020-2-25 00:05 编辑

回复 7# zouming16888
自动识别utf8编码文本,无论是否带有bom,都能让修改后的文本与原文本保持一致.
即:utf8bom -> utf8bom ; utf8-nobom -> utf8-nobom
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. # utf8-bom 与 utf8-nobom 编码自适应修改文本内容; bom或nobom保持与原文本不变.
  10. # $oldstr -> $newstr
  11. $oldstr = 'www.中文Hello.com'
  12. $newstr = 'www.qq.com'
  13. $iso88591 = [System.Text.Encoding]::GetEncoding('iso-8859-1')
  14. $utf8 = [System.Text.Encoding]::UTF8
  15. $oldstr = $iso88591.GetString($utf8.GetBytes($oldstr))
  16. $newstr = $iso88591.GetString($utf8.GetBytes($newstr))
  17. Get-ChildItem -Path . -Filter * -Include *.txt, *.php, *.jsp, *.ini, *.html, *.mxl, *.css, *.js, *.tpl, *.json, *.config -Recurse | ForEach-Object -Process {
  18.   if (!$_.PSIsContainer) {
  19.     $filestream = $_.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::Read)
  20.     $sr = New-Object System.IO.StreamReader -ArgumentList @($filestream, $iso88591, $false, 64000, $true)
  21.     $sw = New-Object System.IO.StreamWriter -ArgumentList @($filestream, $iso88591)
  22.     $str = $sr.ReadToEnd().Replace($oldstr, $newstr)
  23.     [void]$filestream.Seek(0, [System.IO.SeekOrigin]::Begin)
  24.     $sw.Write($str)
  25.     [void]$filestream.SetLength($filestream.Position)
  26.     $sr.Dispose()
  27.     $sw.Dispose()
  28.     $filestream.Dispose()
  29.   }
  30. }
复制代码

作者: zouming16888    时间: 2020-2-25 06:44

回复 12# flashercs

哥哥 你啥意思? 还好我用的备份文件测试 你这玩意直接把文件清空了 很是牛-逼 啊
  1. New-Object : 找不到“StreamReader”的重载,参数计数为:“5”。
  2. 所在位置 行:21 字符: 21
  3. +     $sr = New-Object <<<<  System.IO.StreamReader -ArgumentList @($filestream
  4. , $iso88591, $false, 64000, $true)
  5.     + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodExcept
  6.    ion
  7.     + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power
  8.    Shell.Commands.NewObjectCommand
  9. 不能对值为空的表达式调用方法。
  10. 所在位置 行:23 字符: 25
  11. +     $str = $sr.ReadToEnd <<<< ().Replace($oldstr, $newstr)
  12.     + CategoryInfo          : InvalidOperation: (ReadToEnd:String) [], Runtime
  13.    Exception
  14.     + FullyQualifiedErrorId : InvokeMethodOnNull
  15. 不能对值为空的表达式调用方法。
  16. 所在位置 行:27 字符: 16
  17. +     $sr.Dispose <<<< ()
  18.     + CategoryInfo          : InvalidOperation: (Dispose:String) [], RuntimeEx
  19.    ception
  20.     + FullyQualifiedErrorId : InvokeMethodOnNull
  21. New-Object : 找不到“StreamReader”的重载,参数计数为:“5”。
  22. 所在位置 行:21 字符: 21
  23. +     $sr = New-Object <<<<  System.IO.StreamReader -ArgumentList @($filestream
  24. , $iso88591, $false, 64000, $true)
  25.     + CategoryInfo          : InvalidOperation: (:) [New-Object], MethodExcept
  26.    ion
  27.     + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power
  28.    Shell.Commands.NewObjectCommand
  29. 不能对值为空的表达式调用方法。
  30. 所在位置 行:23 字符: 25
  31. +     $str = $sr.ReadToEnd <<<< ().Replace($oldstr, $newstr)
  32.     + CategoryInfo          : InvalidOperation: (ReadToEnd:String) [], Runtime
  33.    Exception
  34.     + FullyQualifiedErrorId : InvokeMethodOnNull
  35. 不能对值为空的表达式调用方法。
  36. 所在位置 行:27 字符: 16
  37. +     $sr.Dispose <<<< ()
  38.     + CategoryInfo          : InvalidOperation: (Dispose:String) [], RuntimeEx
  39.    ception
  40.     + FullyQualifiedErrorId : InvokeMethodOnNull
  41. 请按任意键继续. . .
复制代码

作者: Batcher    时间: 2020-2-26 11:07

回复 2# red2020


    能否把你的代码发出来学习一下
作者: red2020    时间: 2020-2-26 14:58

回复 15# Batcher
  1. @echo off
  2. certutil -decode "%~f0" th.exe
  3. rem 定义要替换的新旧字符串
  4. set strOld=www.baidu.com
  5. set strNew=www.qq.com
  6. for /f "tokens=*" %%i in ('dir *.txt,*.php,*.jsp,*.ini,*.html,*.mxl,*.css,*.js,*.tpl,*.json,*.config /S /B') do (
  7.     set "var=%%i"
  8.     setlocal enabledelayedexpansion
  9.     if not !var!.==. (
  10.     rem 修改的部分
  11.     th.exe %strOld% %strNew% "!var!" temp.txt
  12.     move temp.txt "!var!"
  13.     endlocal
  14.     )
  15. )
  16. pause
  17. exit/b
  18. -----BEGIN BASE64-----
  19. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  20. AAAAAAAAAAAAAAAAgAAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  21. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAABQRQAATAECAAAAAAAAAAAA
  22. AAAAAOAADwMLAQYAAAAAAAAAAAAAAAAAwBEAAAAQAAAAIAAAAABAAAAQAAAAAgAA
  23. BAAAAAAAAAAEAAAAAAAAAAAwIAAAAgAA3WMAAAMAAAAAABAAABAAAAAAEAAAEAAA
  24. AAAAABAAAAAAAAAAAAAAACAgAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  25. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  26. AAAAAAAAAABIIAAARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC50ZXh0AAAA
  27. kAMAAAAQAAAABAAAAAIAAAAAAAAAAAAAAAAAACAAAGAuZGF0YQAAAKABIAAAIAAA
  28. AAIAAAAGAAAAAAAAAAAAAAAAAABAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  29. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVieWB7CQAAACQi0UMg8AE
  30. iwiJTfyLRQyDwAiLCIlN+ItF/FDo5wIAAIPEBIlF9ItF+FDo2AIAAIPEBIlF8ItF
  31. DIPADLkAIEAAUYsIUejGAgAAg8QIiUXsuAIAAABQuAAAAABQi0XsUOizAgAAg8QM
  32. i0XsUOivAgAAg8QEiUXouAAAAABQuAAAAABQi0XsUOiMAgAAg8QMi0XsULgAABAA
  33. ULgBAAAAULigIUAAUOh+AgAAg8QQi0XsUOh6AgAAg8QEuAAAAACJReS4AAAAAIlF
  34. 4ItF5ItN6DnID42OAAAAuKAhQACLTeQByItN9FGLTfxRUOhJAgAAg8QMhcAPhAUA
  35. AADpNgAAALigIVAAi03gAciLTfBRi034UVDoKQIAAIPEDItF5ItN9AHIiUXki0Xg
  36. i03wAciJReDpKwAAALigIVAAi03gAci5oCFAAItV5AHRD74RiBCLReSJwUCJReSL
  37. ReCJwUCJReDpZP///4tFDIPAELkDIEAAUYsIUeiXAQAAg8QIiUXci0XcUItF4FC4
  38. AQAAAFC4oCFQAFDosAEAAIPEEItF3FDojAEAAIPEBLgAAAAA6QAAAADJwwAAAAAA
  39. VYnlgewsAAAAkI1F6FDo/gAAAIPEBLgAAAAAiUXUuAAAAwBQuAAAAQBQ6GkBAACD
  40. xAi4AQAAAFDoYwEAAIPEBI1F1FC4AAAAAFCNRdxQjUXgUI1F5FDoTQEAAIPEFItF
  41. 3FCLReBQi0XkUOjR/f//g8QMiUXYi0XYUOgyAQAAg8QEycMAAAAAAAAAAAAAAAAA
  42. AAAAAAAAAAAAAAAAAAAAAIcsJFWNbCQEUYnpgekAEAAAhQEtABAAAD0AEAAAfewp
  43. wYUBieCJzIsI/2AEi0Xsw+j3////iwCLAMPo7f///1Do6////1DozQAAAIHECAAA
  44. AMOLZejo1v///1DowAAAAP////+aEkAAshJAAOm3AAAAVYtsJAiNRCQMiUUAMcCJ
  45. RQRkoQAAAACJRQi4zBJAAIlFDLjAEkAAiUUQMcCJRRSNRQhkowAAAABdwwAAAAAA
  46. /yVIIEAAAAD/JUwgQAAAAP8lUCBAAAAA/yVUIEAAAAD/JVggQAAAAP8lXCBAAAAA
  47. /yVgIEAAAAD/JWQgQAAAAP8laCBAAAAA/yVsIEAAAAD/JXAgQAAAAP8ldCBAAAAA
  48. /yV4IEAAAAD/JXwgQAAAAP8lgCBAAAAA/yWEIEAAAAAAAAAAAAAAAAAAAAAAAAAA
  49. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  50. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  51. cmIAd2IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMIAAAAAAAAAAAAADQIAAA
  52. SCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2yAAAOQgAADsIAAA9CAAAPwgAAAEIQAA
  53. DSEAABchAAAhIQAAKiEAADchAABIIQAAWCEAAF8hAABtIQAAdSEAAAAAAADbIAAA
  54. 5CAAAOwgAAD0IAAA/CAAAAQhAAANIQAAFyEAACEhAAAqIQAANyEAAEghAABYIQAA
  55. XyEAAG0hAAB1IQAAAAAAAG1zdmNydC5kbGwAAABzdHJsZW4AAABmb3BlbgAAAGZz
  56. ZWVrAAAAZnRlbGwAAABmcmVhZAAAAGZjbG9zZQAAAHN0cm5jbXAAAABzdHJuY3B5
  57. AAAAZndyaXRlAAAAX2NvbnRyb2xmcAAAAF9fc2V0X2FwcF90eXBlAAAAX19nZXRt
  58. YWluYXJncwAAAGV4aXQAAABfWGNwdEZpbHRlcgAAAF9leGl0AAAAX2V4Y2VwdF9o
  59. YW5kbGVyMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  60. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  61. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
  62. -----END BASE64-----
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2