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

[文本处理] [已解决]求UTF-8文件添加BOM头的批处理脚本

原文件 UTF-8格式

求添加BOM的批处理
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

添加BOM头
  1. powershell "[System.IO.File]::WriteAllBytes(目标文件,[byte[]](239,187,191)+[System.IO.File]::ReadAllBytes(源文件))"
复制代码

TOP

  1. @echo off
  2. set "filepath=e:\test\[1-9].txt"
  3. Powershell -NoProfile -Command "Get-ChildItem -Path \"%filepath%\"|ForEach-object {$arr = Get-Content -ReadCount 0 -Path $_ -Encoding utf8 ; Set-Content -Value $arr -Path $_ -Encoding utf8}"
  4. pause
  5. exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

回复 3# flashercs


   可以用了 谢谢

TOP

回复 2# ivor


不知道哪里写错了

TOP

回复 5# zhaosiyu2010


    文件路径加引号''

TOP

回复 6# ivor


    谢谢  谢谢

TOP

回复 3# flashercs


    麻烦 再帮忙看下哈
这条语句处理后  在文件末尾 加了一个空行
可以不让它加空行么

TOP

本帖最后由 flashercs 于 2019-8-26 13:38 编辑

回复 8# zhaosiyu2010
  1. @echo off
  2. set "filepath=e:\test\[1-9].txt"
  3. Powershell -NoProfile -Command "Get-ChildItem -Path \"%filepath%\" | ForEach-object { [System.IO.File]::WriteAllText($_.FullName, [System.IO.File]::ReadAllText($_.FullName, [System.Text.UTF8Encoding]::UTF8), (New-Object System.Text.UTF8Encoding -ArgumentList $true)) }"
  4. pause
  5. exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

回复 9# flashercs


    6666666    可以了 ,  谢谢哈

TOP

本帖最后由 zhaosiyu2010 于 2019-12-4 10:06 编辑

回复 9# flashercs


    老哥,在帮下忙,  你的这段加BOM头的命令,我批处理是Windows(CRLF)  带有BOM的UTF-8模式下  使用命令是可以的。

但是我把批处理,改成ANSI编码格式后 执行这个命令,转换出来的文件,虽然格式显示是正确的,但是里面内容却乱码了。。。

TOP

本帖最后由 flashercs 于 2019-12-4 10:44 编辑

回复 11# zhaosiyu2010
  1. @echo off
  2. set "filepath=C:\Users\*.txt"
  3. REM srcEncoding=UTF8 or Default
  4. set srcEncoding=Default
  5. Powershell -NoProfile -Command "$srcEncoding=[System.Text.Encoding]::%srcEncoding%;$utf8bom=New-Object System.Text.UTF8Encoding -ArgumentList $true;Get-ChildItem -Path \"%filepath%\" | ForEach-Object { [System.IO.File]::WriteAllText($_.FullName, [System.IO.File]::ReadAllText($_.FullName, $srcEncoding), $utf8bom) }"
  6. pause
  7. exit /b
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 12# flashercs


    可以了 ,谢谢,谢谢

TOP

# 方法1.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. set "OldFile=1.txt"
  4. set "NewFile=2.txt"
  5. >"%temp%\BOM.tmp" echo 77u/
  6. certutil -decode -f "%temp%\BOM.tmp" "%NewFile%" >nul
  7. >>"%NewFile%" type "%OldFile%"
复制代码
# 方法2.bat
  1. @echo off
  2. cd /d "%~dp0"
  3. set "OldFile=1.txt"
  4. set "NewFile=2.txt"
  5. powershell "[System.IO.File]::WriteAllBytes('%NewFile%',[byte[]](239,187,191)+[System.IO.File]::ReadAllBytes('%OldFile%'))"
复制代码
# 方法3.bat
http://bcn.bathome.net/s/tool/index.html?key=sed
  1. @echo off
  2. cd /d "%~dp0"
  3. set "OldFile=1.txt"
  4. set "NewFile=2.txt"
  5. sed.exe "1s/^/\xEF\xBB\xBF/" "%OldFile%" > "%NewFile%"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表