Board logo

标题: [文本处理] [已解决]求UTF-8文件添加BOM头的批处理脚本 [打印本页]

作者: zhaosiyu2010    时间: 2019-8-24 20:57     标题: [已解决]求UTF-8文件添加BOM头的批处理脚本

原文件 UTF-8格式

求添加BOM的批处理
作者: ivor    时间: 2019-8-24 22:01

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

作者: flashercs    时间: 2019-8-24 22:42

  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
复制代码

作者: zhaosiyu2010    时间: 2019-8-25 11:19

回复 3# flashercs


   可以用了 谢谢
作者: zhaosiyu2010    时间: 2019-8-25 11:24

回复 2# ivor


不知道哪里写错了
作者: ivor    时间: 2019-8-25 14:08

回复 5# zhaosiyu2010


    文件路径加引号''
作者: zhaosiyu2010    时间: 2019-8-26 12:20

回复 6# ivor


    谢谢  谢谢
作者: zhaosiyu2010    时间: 2019-8-26 12:22

回复 3# flashercs


    麻烦 再帮忙看下哈
这条语句处理后  在文件末尾 加了一个空行
可以不让它加空行么
作者: flashercs    时间: 2019-8-26 13:20

本帖最后由 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
复制代码

作者: zhaosiyu2010    时间: 2019-8-26 17:11

回复 9# flashercs


    6666666    可以了 ,  谢谢哈
作者: zhaosiyu2010    时间: 2019-12-4 10:04

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

回复 9# flashercs


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

但是我把批处理,改成ANSI编码格式后 执行这个命令,转换出来的文件,虽然格式显示是正确的,但是里面内容却乱码了。。。
作者: flashercs    时间: 2019-12-4 10:26

本帖最后由 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
复制代码

作者: zhaosiyu2010    时间: 2019-12-4 10:30

回复 12# flashercs


    可以了 ,谢谢,谢谢
作者: Batcher    时间: 2023-9-12 16:05

# 方法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%"
复制代码





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