You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Batch脚本处理UTF-8文本:添加单引号及空格替换故障排查

Batch脚本修正:UTF-8文本行处理问题解决

问题概述

编写Batch脚本处理UTF-8编码的part2.txt时遇到以下问题:

  • 无法为每行逗号分隔的元素正确添加单引号
  • 空格替换为下划线的逻辑错误
  • 部分行内容丢失
  • 输出存在单引号重复、格式混乱的情况

输入文件每行格式为:(值1,值2,值3,NULL);
预期输出要求:

  • 给每个逗号分隔的字符串添加单引号
  • 将所有空格替换为下划线
  • 去除行尾的空格和分号

原脚本代码如下:

@echo off
setlocal enabledelayedexpansion

chcp 65001

call temp.bat

rem Path to the text file
set "inputFile=%folder%\part2.txt"
set "outputFile=%folder%\part2_modified.txt"
set "tempFile=%folder%\temp.txt"

rem Check if the file exists
if not exist "%inputFile%" (
    echo File %inputFile% does not exist.
    pause
    goto :eof
)

rem Create an empty output file
> "%tempFile%" echo.

rem Read lines from the file, replace spaces with underscores, and add apostrophes
for /f "tokens=*" %%A in (%inputFile%) do (
    set "line=%%A"
    set "line=!line: =_!"

    rem Add apostrophes to each element before the comma
    set "newLine="
    for %%B in ("!line:,=" "!") do (
        if defined newLine (
            set "newLine=!newLine!,"
        )
        set "newLine=!newLine!'%%~B'"
    )
    
    >> "%tempFile%" echo !newLine!
)

rem Move the first apostrophe after the first parenthesis
> "%outputFile%" echo.
for /f "tokens=*" %%A in (%tempFile%) do (
    set "line=%%A"
    set "prefix="
    set "rest="
    for /f "tokens=1* delims=()" %%B in ("!line!") do (
        set "prefix=%%B"
        set "rest=%%C"
    )
    set "newLine=(!prefix!'!rest!"
    
    >> "%outputFile%" echo !newLine!
)

rem Delete the temporary file
del "%tempFile%"

echo Replacement of spaces with underscores and addition of apostrophes completed. Result saved in %outputFile%.

endlocal

修正后的脚本

@echo off
setlocal enabledelayedexpansion

:: 切换为UTF-8编码,屏蔽编码切换提示
chcp 65001 >nul

call temp.bat

:: 定义文件路径
set "inputFile=%folder%\part2.txt"
set "outputFile=%folder%\part2_modified.txt"

:: 检查输入文件是否存在
if not exist "%inputFile%" (
    echo 错误:文件 %inputFile% 不存在。
    pause
    goto :eof
)

:: 清空输出文件
> "%outputFile%" echo.

:: 逐行处理输入文件,确保读取完整内容
for /f "usebackq delims=" %%A in ("%inputFile%") do (
    set "line=%%A"
    
    :: 1. 清理行尾的分号和多余空格
    set "line=!line:;=!"
    set "line=!line: =!"
    
    :: 2. 将剩余空格替换为下划线
    set "line=!line: =_!"
    
    :: 3. 提取括号内的内容,批量给元素添加单引号
    set "content=!line:~1,-1!"
    set "quotedContent='!content:,='','!'"
    
    :: 4. 拼接成目标格式
    set "newLine=(!quotedContent!);"
    
    :: 写入输出文件
    >> "%outputFile%" echo !newLine!
)

echo 处理完成,结果已保存至 %outputFile%。
endlocal

关键修正点说明

  • 编码兼容优化:添加>nul屏蔽编码切换的冗余输出,避免干扰文件内容
  • 完整行读取:使用usebackq delims=参数,确保能正确读取带空格、特殊字符的行,不会丢失内容
  • 行内容清理逻辑:先清理行尾的分号和多余空格,再替换剩余空格为下划线,避免替换逻辑混乱
  • 批量添加单引号:用字符串批量替换'!content:,='','!'直接给所有元素包裹单引号,避免循环分割导致的引号重复问题
  • 流程简化:去掉冗余的临时文件操作,直接生成最终输出,减少文件IO开销
  • 格式严格对齐:确保输出格式严格符合('值1','值2','值3','NULL');的预期要求

内容的提问来源于stack exchange,提问作者Paweeeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 06:25:55