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

[文本处理] 求BAT脚本将目录里txt文件里英文引号改为中文引号

将目录中所有TXT里的英文引号变为中文引号。

换vbs或jscript或powershell或其他

TOP

对于小白来说,真的是太难了。

TOP

保存为ansi编码的bat
txt文件编码需要为utf8
不成对引号的不替换
英文引号不分左右,结果可能不准确
  1. #?&cls&pause&powershell -c "type -literalpath '%~f0'|out-string|iex"&pause&exit
  2. $cd='utf8'
  3. $z={param($s) '“'+$s.value.substring(1,$s.value.length-2)+'”'}
  4. $zz={param($s) "‘"+$s.value.substring(1,$s.value.length-2)+"’"}
  5. gci -n|%{
  6. $str=[io.file]::ReadAllText($pwd.path+"\"+$_)
  7. $str=[regex]::Replace($str,'".*?"',$z)
  8. $str=[regex]::Replace($str,"'.*?'",$zz)
  9. sc -LiteralPath ("__new"+$_) -Encoding $cd -value $str
  10. [console]::writeline("has been save to file:  "+"__new"+$_)
  11. $str=""
  12. }
复制代码

TOP

本帖最后由 aloha20200628 于 2024-3-11 19:49 编辑

回复 1# dzwind

给一个批处理版本如下,代码存为test.bat
运行方法如》test.bat "源文件.txt"
读取命令行参数为源文件,输出文件扩展名为*.new
中文双引号可选两种类型,见11-12行
  1. @echo off &setlocal enabledelayedexpansion
  2. if "%~1"=="" exit/b
  3. set/a "pm=1"
  4. (for /f "usebackq delims=" %%a in ("%~1") do (
  5. set "s=%%a"&set "_s=%%a"
  6. for %%p in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  7. if "!_s:~%%p,1!" neq "" (set/a "ls+=%%p"&set "_s=!_s:~%%p!")
  8. )
  9. for /L %%n in (0,1,!ls!) do (
  10. set "c=!s:~%%n,1!" &if ^!c! == ^" (
  11. set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=「") else (set "c=」")
  12. REM set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=“") else (set "c=”")
  13. )
  14. set "_line=!_line!!c!"
  15. )
  16. echo,!_line!&set "_line="&set "ls=0"
  17. ))>"%~1.new"
  18. endlocal&exit/b
复制代码

TOP

本帖最后由 aloha20200628 于 2024-3-11 19:56 编辑

回复 1# dzwind

5楼代码可用于随机性测试单个文件,若均予通过,可用以下代码完成脚本所在目录下的全部*.txt替换...生成与每一个源文件对应的*.new新文件
  1. @echo off &setlocal enabledelayedexpansion
  2. for /f "delims=" %%F in ('dir/s/b/a-d *.txt') do (
  3. set/a "pm=1"
  4. (for /f "usebackq delims=" %%a in ("%%~F") do (
  5. set "s=%%a"&set "_s=%%a"
  6. for %%p in (4096 2048 1024 512 256 128 64 32 16 8 4 2 1) do (
  7. if "!_s:~%%p,1!" neq "" (set/a "ls+=%%p"&set "_s=!_s:~%%p!")
  8. )
  9. for /L %%n in (0,1,!ls!) do (
  10. set "c=!s:~%%n,1!" &if ^!c! == ^" (
  11. REM set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=「") else (set "c=」")
  12. set/a "pm=0-!pm!" &if !pm! equ -1 (set "c=“") else (set "c=”")
  13. )
  14. set "_line=!_line!!c!"
  15. )
  16. echo,!_line!&set "_line="&set "ls=0"
  17. ))>"%%~F.new"
  18. )
  19. endlocal&exit/b
复制代码

TOP

本帖最后由 dzwind 于 2024-3-12 15:39 编辑

谢谢楼上的各位大神

TOP

返回列表