如何在MS-DOS中为文件每行前缀添加指定字符串(禁用第三方命令及QBASIC)
如何在MS-DOS中为文件每行前缀添加指定字符串(禁用第三方命令及QBASIC)
嘿,这个问题确实有点挠头——毕竟MS-DOS的命令集比后来Windows的CMD简陋太多,那些好用的FOR /F参数根本不存在。不过咱们靠系统自带的工具就能搞定,我给你两个靠谱的方案:
方案1:用EDLIN(MS-DOS内置行编辑器)
EDLIN是MS-DOS自带的原生工具,完全符合“无第三方、不用QBASIC”的要求,而且处理带特殊字符的行也很稳。步骤如下:
- 先创建一个脚本文件(比如命名为
addprefix.scr),把下面的内容复制进去,记得把你的前缀内容改成你实际要加的字符串:
e 1,$s/^/你的前缀内容 / w q
简单解释下这几行的作用:
e:进入EDLIN的编辑模式1,$s/^/你的前缀内容 /:对第1行到最后一行(1,$)执行替换,把每行的开头(^)换成你要加的前缀w:保存修改后的文件q:退出EDLIN
- 打开MS-DOS提示符,运行下面的命令(把
你的目标文件名.txt换成你要处理的文件):
edlin 你的目标文件名.txt < addprefix.scr
执行完之后,打开原文件就能看到每行都加上前缀啦。比如你要给log.txt每行加[INFO] ,那脚本里的替换命令就改成1,$s/^/[INFO] /。
方案2:纯批处理实现(不用编辑器)
如果你不想碰编辑器,也可以用纯批处理配合临时文件搞定,就是对文件内容的规整度要求高一点(适合无空格、无特殊字符的行)。直接用下面的批处理脚本,按需修改开头的参数:
@ECHO OFF SETLOCAL REM 请根据需求修改下面的参数 SET "PREFIX=MyPrefix: " SET "INFILE=input.txt" SET "OUTFILE=output.txt" SET "TEMPBAT=temp_proc.bat" REM 先清空临时批处理和输出文件 TYPE NUL > %TEMPBAT% TYPE NUL > %OUTFILE% REM 生成临时批处理的基础内容 ECHO @ECHO OFF >> %TEMPBAT% ECHO SETLOCAL >> %TEMPBAT% REM 把原文件内容导入临时批处理(过滤空行) TYPE %INFILE% | FIND /V "" >> %TEMPBAT% REM 把临时批处理里的每行内容,改成带前缀的ECHO命令 COPY %TEMPBAT% temp_raw.txt TYPE NUL > %TEMPBAT% FOR %%L IN (temp_raw.txt) DO ( FOR %%C IN (%%L) DO ( ECHO ECHO %PREFIX%%%C >> %TEMPBAT% ) ) REM 把ECHO的结果输出到目标文件 ECHO ECHO. >> %TEMPBAT% ECHO ENDLOCAL >> %TEMPBAT% CALL %TEMPBAT% >> %OUTFILE% REM 清理临时文件 DEL %TEMPBAT% temp_raw.txt ECHO 处理完成!输出文件:%OUTFILE% ENDLOCAL
⚠️ 注意:这个方案的局限性是,如果原文件的行包含空格、&、|这类特殊字符,会出现参数拆分错误。如果你的文件内容比较规整(比如纯代码、无空格的日志),这个方法没问题;要是有特殊字符,还是优先用EDLIN方案。
备注:内容来源于stack exchange,提问作者barlop
相关产品推荐
相关产品推荐

