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

[文本处理] 【已解决】求精简带有BOM的UFT-8文本的批处理

要求:保留 {$CP936=    {$CP936=                    {$CP0=
                   ............       .................                   ...............        
                              $}                       $}                               $}
  各位大佬,请帮忙看看能不能实现
  因无法上传附件,只能使用123网盘上传修改内容,请见谅!
   https://www.123pan.com/s/UQLA-Tp0eh.html
1

评分人数

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

回复 20# buyiyang


    搞定了,多谢大佬的指点。

TOP

回复 18# hfstar


    你的%YB%和%TH%中的^$符号需要\转义
1

评分人数

TOP

回复 17# buyiyang


   谢谢大佬指点!这样用bat生成 utf-8 带bom方便多了。
bat小白,请多指教!谢谢!

TOP

回复 17# buyiyang


   刚刚写的,替换不成功,能否指点一下问题出在哪?
@echo off & cd/d "%~dp0"

chcp 65001

set YB='{$CP949^=간단 팝업 메뉴$}'
set TH='{$CP936^=简易弹出菜单$}{$CP950^=簡易彈出選單$}'
powershell -c "(Get-Content SimpleMenu.xml -encoding utf8 ) -Replace %YB%,%TH%" > SimpleMenu测试.xml



pause>nul & exit

TOP

回复 11# 77七


    批处理可以这样产生bom头
  1. >bom echo(77u/
  2. certutil -decode -f bom 2.txt
复制代码
还可以这样,参考:http://www.bathome.net/viewthread.php?tid=12347&rpid=79254&ordertype=0&page=1#pid79254
  1. @ECHO off&setlocal EnableDelayedExpansion
  2. Set gbk=可去便
  3. chcp 437>nul
  4. for /f %%a in ('cmd/u/cecho !gbk!')do set utf=%%a
  5. Set head=!utf:~0,1!!utf:~2,1!!utf:~4,1!
  6. set/p=!head!<nul>2.txt
复制代码
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 15# 77七


    没事没事

TOP

回复 12# hfstar


   
ps我不懂,bat也不太好替换等号。
bat小白,请多指教!谢谢!

TOP

回复 13# qixiaobin0715


    好的

TOP

本帖最后由 qixiaobin0715 于 2023-9-12 16:09 编辑

如果需要保留的不同字段类型较多,这样要简洁些:
  1. @echo off
  2. chcp 65001
  3. set var="{$CP936=" "{$CP950=" "{$CP0="
  4. (for /f "tokens=1* delims=]" %%i in ('find /v /n "" License.txt') do (
  5.     if defined n (
  6.         echo,%%j
  7.         if "%%j"=="$}" set n=
  8.     ) else (
  9.         for %%k in (%var%) do (
  10.             if "%%j"==%%k (
  11.                 set n=0
  12.                 echo,%%j
  13.             )
  14.         )
  15.     )
  16. ))>"License_精简.txt"
  17. pause
复制代码
又修改了下,这样总的判断频次要少一些。

TOP

回复 11# 77七


    学习了,
假如,我要用批处理调用 powershell 把 xml 文件中的 {$CP949=간단 팝업 메뉴$} 替换为 {$CP936=简易弹出菜单$}{$CP950=簡易彈出選單$} ,那该怎么做呢?

TOP

找了个创建utf-8 带bom文件的ps代码,模仿大佬用混编写到一起
  1. <# :
  2. cls&echo off&cd /d "%~dp0"&chcp 65001 >nul&set "current=%cd%"
  3. path %SYSTEMROOT%\System32\WindowsPowerShell\v1.0;%path%
  4. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal \"%~f0\"|Out-String|Invoke-Expression"
  5. set "file=1.txt"
  6. (for /f "tokens=1* delims=:" %%a in ('findstr /n .* "%file%"') do (
  7. if "%%b" equ "{$CP936=" (
  8. set m=1
  9. ) else if "%%b" equ "{$CP950=" (
  10. set m=1
  11. ) else if "%%b" equ "{$CP0=" (
  12. set m=1
  13. ) else if "%%b" equ "$}" (
  14. if defined m (
  15. echo %%b
  16. )
  17. set m=
  18. )
  19. if defined m (
  20. echo=%%b
  21. )
  22. ))>>2.txt
  23. echo;done
  24. pause
  25. exit
  26. #>
  27. $filePath = "2.txt"
  28. # 创建文件并写入BOM
  29. $fileStream = [System.IO.File]::Create($filePath)
  30. $bom = New-Object byte[] 3
  31. $bom[0] = 0xEF
  32. $bom[1] = 0xBB
  33. $bom[2] = 0xBF
  34. $fileStream.Write($bom, 0, 3)
  35. $fileStream.Close()
复制代码
bat小白,请多指教!谢谢!

TOP

刚刚测试了一下,各位大佬的脚本都能完美实现,多谢你们的帮忙

TOP

回复 7# Batcher


    这个可以了,

TOP

回复 6# qixiaobin0715


   谢谢大佬指点!我一直以为只有findstr可以打印行号,以后就首选find了。
bat小白,请多指教!谢谢!

TOP

返回列表