Windows下批处理按列合并TXT文件出现UTF-8乱码及无分隔符问题
问题修复方案
核心修改逻辑
两个问题可分别通过调整控制台编码、插入制表符分隔符解决,修改后的完整批处理代码如下:
@echo off :: 切换控制台编码为UTF-8,屏蔽命令输出 chcp 65001 >nul set f1=1.txt set f2=2.txt set outfile=mix.txt type nul>%outfile% ( for /f "delims=" %%a in (%f1%) do ( setlocal enabledelayedexpansion set /p line= :: 两个变量中间的空白为制表符(直接按Tab键输入即可) echo(%%a !line!>>%outfile% endlocal ) )<%f2% pause
修改说明
- 编码乱码修复:批处理默认使用系统区域对应的ANSI编码(你的场景下为Windows-1253希腊语编码),在脚本开头添加
chcp 65001 >nul即可将编码切换为UTF-8,匹配源文件的编码格式,避免非ASCII字符转码错误。 - 制表符分隔修复:在
echo输出语句的%%a和!line!两个变量中间插入制表符(按键盘Tab键输入的空白字符),即可实现两列之间用制表符分隔的需求。
性能优化提示(可选)
如果处理百万行级数据时批处理效率过低,可使用PowerShell命令实现更高性能的合并,示例命令如下:
$lines1 = [System.IO.File]::ReadLines("1.txt") $lines2 = [System.IO.File]::ReadLines("2.txt") $output = [System.IO.StreamWriter]::new("mix.txt", $false, [System.Text.Encoding]::UTF8) $enum1 = $lines1.GetEnumerator() $enum2 = $lines2.GetEnumerator() while ($enum1.MoveNext() -and $enum2.MoveNext()) { $output.WriteLine($enum1.Current + "`t" + $enum2.Current) } $output.Dispose()
内容的提问来源于stack exchange,提问作者greektranslator
相关产品推荐
相关产品推荐

