如何编写Batch脚本将批处理文件每行用&符号拼接为单行
Batch脚本实现多行批处理内容按&拼接为单行的方法
你原有代码的逻辑是将行内的空格替换为&,和「按行拼接、行间用&分隔」的需求不符,所以无法得到预期结果。
以下是可直接实现需求的脚本:
@echo off setlocal enabledelayedexpansion :: 配置源文件和目标文件路径 set "sourceFile=MYFILE1.bat" set "targetFile=MYFILE2.bat" set "merged=" :: 逐行读取源文件内容拼接 for /f "delims=" %%a in ('type "%sourceFile%"') do ( if not defined merged ( set "merged=%%a" ) else ( set "merged=!merged! & %%a" ) ) :: 输出拼接结果到目标文件 echo !merged!> "%targetFile%" endlocal echo 转换完成,结果已写入%targetFile%
注意事项
- 脚本默认会自动过滤源文件中的空行,如果需要保留空行,可以将
for /f的读取语句替换为for /f "delims=" %%a in ('findstr /n "^" "%sourceFile%"'),再额外去除读取结果的行号前缀即可 - 如果源文件内容包含
!等延迟扩展敏感字符,可以使用以下兼容特殊字符的稳定版本:
@echo off setlocal disableextensions disabledelayedexpansion set "sourceFile=MYFILE1.bat" set "targetFile=MYFILE2.bat" set "merged=" for /f "delims=" %%a in ('type "%sourceFile%"') do ( set "line=%%a" setlocal enabledelayedexpansion if not defined merged ( set "merged=!line!" ) else ( set "merged=!merged! & !line!" ) for /f "delims=" %%b in ("!merged!") do ( endlocal set "merged=%%b" ) ) setlocal enabledelayedexpansion echo !merged!> "%targetFile%" endlocal echo 转换完成
内容的提问来源于stack exchange,提问作者rifteyy
相关产品推荐
相关产品推荐

