批处理之家's Archiver

zouming16888 发表于 2020-2-24 01:43

紧急求助替换php、html等文件里的汉字会乱码

[code]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
    )
)[/code]经过测试 只有 txt文本文件里的 汉字不会乱码, php  html   .config  等这些文件 里的汉字 都会乱码,

经过测试 解决方法  加个 Chcp 65001  就解决了 哎哎

red2020 发表于 2020-2-24 01:51

这种简单问题还用注册个账号询问批处理吗?

zouming16888 发表于 2020-2-24 01:55

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226731&ptid=54907]2#[/url] [i]red2020[/i] [/b]

用啊 不会不得问问吗 :'(

zouming16888 发表于 2020-2-24 06:57

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

大神们 帮帮孩子吧

flashercs 发表于 2020-2-24 11:33

(1)把下面的批处理脚本保存编码格式为utf8-nobom,一定不能用 记事本编辑.
(2)所有处理的文件一律改用utf8编码.[code]::替换内容

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
    )
)[/code]

zaqmlp 发表于 2020-2-24 13:26

[code]<# :
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);
}[/code]

zouming16888 发表于 2020-2-24 20:16

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226735&ptid=54907]5#[/url] [i]flashercs[/i] [/b]

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

还有里面的  <!-- For more information on Entity Framework configuration, visit 这一段 For 开头的 会被都删掉

zouming16888 发表于 2020-2-24 20:19

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226742&ptid=54907]6#[/url] [i]zaqmlp[/i] [/b]

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

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

原文件是 无 BOM格式 替换完的就变成 图片这种了

zaqmlp 发表于 2020-2-24 21:11

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226755&ptid=54907]8#[/url] [i]zouming16888[/i] [/b]

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

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

要感谢还是红包实际点

zouming16888 发表于 2020-2-24 21:27

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226756&ptid=54907]9#[/url] [i]zaqmlp[/i] [/b]

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

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

稍后我给支付宝绑个卡 ,小红包感谢!或者给我个微信码 微信里有钱

zaqmlp 发表于 2020-2-24 21:43

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226757&ptid=54907]10#[/url] [i]zouming16888[/i] [/b]


配合修改扩展名  $ext=……

flashercs 发表于 2020-2-24 23:58

[i=s] 本帖最后由 flashercs 于 2020-2-25 00:05 编辑 [/i]

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226754&ptid=54907]7#[/url] [i]zouming16888[/i] [/b]
自动识别utf8编码文本,无论是否带有bom,都能让修改后的文本与原文本保持一致.
即:utf8bom -> utf8bom ; utf8-nobom -> utf8-nobom[code]<#*,:&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()
  }
}[/code]

zouming16888 发表于 2020-2-25 06:44

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226760&ptid=54907]12#[/url] [i]flashercs[/i] [/b]

哥哥 你啥意思? 还好我用的备份文件测试 你这玩意直接把文件清空了 很是牛-逼 啊[code]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

请按任意键继续. . .[/code]

Batcher 发表于 2020-2-26 11:07

[b]回复 [url=http://bbs.bathome.net/redirect.php?goto=findpost&pid=226731&ptid=54907]2#[/url] [i]red2020[/i] [/b]


    能否把你的代码发出来学习一下[img]http://bbs.bathome.net/images/smilies/default/lol.gif[/img]

red2020 发表于 2020-2-26 14:58

[b]回复 [url=http://www.bathome.net/redirect.php?goto=findpost&pid=226793&ptid=54907]15#[/url] [i]Batcher[/i] [/b][code]@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-----
[/code]

页: [1]

Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.