标题: [文本处理] 紧急求助替换php、html等文件里的汉字会乱码 [打印本页]
作者: zouming16888 时间: 2020-2-24 01:43 标题: 紧急求助替换php、html等文件里的汉字会乱码
- rem 定义要替换的新旧字符串
- cd %cd%
- set strOld=www.baidu.com
- set strNew=www.qq.com
-
- for /f "tokens=*" %%i in ('dir *.txt,*.php,*.jsp,*.ini,*.html,*.mxl,*.css,*.js,*.tpl,*.json,*.config /S /B') do (
- set "var=%%i"
- setlocal enabledelayedexpansion
- if not !var!.==. (
- for /f "usebackq tokens=*" %%j in ("!var!") do (
- set "tmp=%%j"
- if not !tmp!.==. (
- set "tmp=!tmp:%strOld%=%strNew%!"
- echo !tmp!>>temp.txt
- )
- )
- move temp.txt "!var!"
- endlocal
- )
- )
复制代码
经过测试 只有 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编码.- ::替换内容
-
- rem 定义要替换的新旧字符串
- chcp 65001
- cd %cd%
- set strOld=www.baidu.com
- set strNew=www.qq.com
-
- for /f "tokens=*" %%i in ('dir *.txt,*.php,*.jsp,*.ini,*.html,*.mxl,*.css,*.js,*.tpl,*.json,*.config /S /B') do (
- set "var=%%i"
- setlocal enabledelayedexpansion
- if not !var!.==. (
- for /f "usebackq tokens=*" %%j in ("!var!") do (
- set "tmp=%%j"
- if not !tmp!.==. (
- set "tmp=!tmp:%strOld%=%strNew%!"
- echo !tmp!>>temp.txt
- )
- )
- move temp.txt "!var!"
- endlocal
- )
- )
复制代码
作者: zaqmlp 时间: 2020-2-24 13:26
- <# :
- cls
- @echo off
- set info=互助互利,支付宝扫码头像,感谢赞助
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- set "rootpath=%~dp0"
- if "%rootpath:~-1%" equ "\" (set "rootpath=%rootpath:~,-1%")
- cd /d "%rootpath%"
- powershell -NoProfile -ExecutionPolicy bypass "Invoke-Command -ScriptBlock ([ScriptBlock]::Create([IO.File]::ReadAllText('%~f0',[Text.Encoding]::Default))) -Args '%rootpath%'"
- echo;%info%
- pause
- exit
- #>
-
- $oldstr='www.baidu.com';
- $newstr='www.qq.com';
-
- #原文件编码为ANSI/GB2312, 则改为[Text.Encoding]::Default
- $enc=[Text.Encoding]::UTF8;
-
- $ext=@('.php', '.jsp', '.ini', '.html', '.xml', '.css', '.js', '.tpl', '.json', '.config');
-
- $files=@(dir -liter $args[0] -recurse|?{($ext -contains $_.Extension) -and ($_ -is [System.IO.FileInfo])});
- for($i=0;$i -lt $files.length;$i++){
- write-host $files[$i].FullName;
- $text=[IO.File]::ReadAllText($files[$i].FullName, $enc);
- $text=$text.replace($oldstr, $newstr);
- [IO.File]::WriteAllText($files[$i].FullName, $text, $enc);
- }
复制代码
作者: 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- <#*,:&cls
- @echo off
- pushd "%~dp0"
- powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
- popd
- pause
- exit /b
- #>
- # utf8-bom 与 utf8-nobom 编码自适应修改文本内容; bom或nobom保持与原文本不变.
- # $oldstr -> $newstr
- $oldstr = 'www.中文Hello.com'
- $newstr = 'www.qq.com'
-
- $iso88591 = [System.Text.Encoding]::GetEncoding('iso-8859-1')
- $utf8 = [System.Text.Encoding]::UTF8
- $oldstr = $iso88591.GetString($utf8.GetBytes($oldstr))
- $newstr = $iso88591.GetString($utf8.GetBytes($newstr))
- Get-ChildItem -Path . -Filter * -Include *.txt, *.php, *.jsp, *.ini, *.html, *.mxl, *.css, *.js, *.tpl, *.json, *.config -Recurse | ForEach-Object -Process {
- if (!$_.PSIsContainer) {
- $filestream = $_.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::Read)
- $sr = New-Object System.IO.StreamReader -ArgumentList @($filestream, $iso88591, $false, 64000, $true)
- $sw = New-Object System.IO.StreamWriter -ArgumentList @($filestream, $iso88591)
- $str = $sr.ReadToEnd().Replace($oldstr, $newstr)
- [void]$filestream.Seek(0, [System.IO.SeekOrigin]::Begin)
- $sw.Write($str)
- [void]$filestream.SetLength($filestream.Position)
- $sr.Dispose()
- $sw.Dispose()
- $filestream.Dispose()
- }
- }
复制代码
作者: zouming16888 时间: 2020-2-25 06:44
回复 12# flashercs
哥哥 你啥意思? 还好我用的备份文件测试 你这玩意直接把文件清空了 很是牛-逼 啊- New-Object : 找不到“StreamReader”的重载,参数计数为:“5”。
- 所在位置 行:21 字符: 21
- + $sr = New-Object <<<< System.IO.StreamReader -ArgumentList @($filestream
- , $iso88591, $false, 64000, $true)
- + CategoryInfo : InvalidOperation: (:) [New-Object], MethodExcept
- ion
- + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power
- Shell.Commands.NewObjectCommand
-
- 不能对值为空的表达式调用方法。
- 所在位置 行:23 字符: 25
- + $str = $sr.ReadToEnd <<<< ().Replace($oldstr, $newstr)
- + CategoryInfo : InvalidOperation: (ReadToEnd:String) [], Runtime
- Exception
- + FullyQualifiedErrorId : InvokeMethodOnNull
-
- 不能对值为空的表达式调用方法。
- 所在位置 行:27 字符: 16
- + $sr.Dispose <<<< ()
- + CategoryInfo : InvalidOperation: (Dispose:String) [], RuntimeEx
- ception
- + FullyQualifiedErrorId : InvokeMethodOnNull
-
- New-Object : 找不到“StreamReader”的重载,参数计数为:“5”。
- 所在位置 行:21 字符: 21
- + $sr = New-Object <<<< System.IO.StreamReader -ArgumentList @($filestream
- , $iso88591, $false, 64000, $true)
- + CategoryInfo : InvalidOperation: (:) [New-Object], MethodExcept
- ion
- + FullyQualifiedErrorId : ConstructorInvokedThrowException,Microsoft.Power
- Shell.Commands.NewObjectCommand
-
- 不能对值为空的表达式调用方法。
- 所在位置 行:23 字符: 25
- + $str = $sr.ReadToEnd <<<< ().Replace($oldstr, $newstr)
- + CategoryInfo : InvalidOperation: (ReadToEnd:String) [], Runtime
- Exception
- + FullyQualifiedErrorId : InvokeMethodOnNull
-
- 不能对值为空的表达式调用方法。
- 所在位置 行:27 字符: 16
- + $sr.Dispose <<<< ()
- + CategoryInfo : InvalidOperation: (Dispose:String) [], RuntimeEx
- ception
- + FullyQualifiedErrorId : InvokeMethodOnNull
-
- 请按任意键继续. . .
复制代码
作者: Batcher 时间: 2020-2-26 11:07
回复 2# red2020
能否把你的代码发出来学习一下
作者: red2020 时间: 2020-2-26 14:58
回复 15# Batcher - @echo off
- certutil -decode "%~f0" th.exe
-
- rem 定义要替换的新旧字符串
- set strOld=www.baidu.com
- set strNew=www.qq.com
-
- for /f "tokens=*" %%i in ('dir *.txt,*.php,*.jsp,*.ini,*.html,*.mxl,*.css,*.js,*.tpl,*.json,*.config /S /B') do (
- set "var=%%i"
- setlocal enabledelayedexpansion
- if not !var!.==. (
-
- rem 修改的部分
- th.exe %strOld% %strNew% "!var!" temp.txt
- move temp.txt "!var!"
- endlocal
- )
- )
- pause
- exit/b
-
-
-
- -----BEGIN BASE64-----
- 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
- -----END BASE64-----
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |