Win10下批处理For循环两次findstr输出合并为单行写入TXT问题
批处理两次findstr搜索结果合并单行输出方案
问题根因
原有代码中两次findstr命令执行后会各自输出带换行符的结果,写入文件时自然会拆分为两行。
修复后代码
@echo off setlocal enabledelayedexpansion :: 初始化清空输出文件 > All_Metadata.txt type nul for %%a in (*.txt) do ( REM 捕获第一个以589开头的匹配结果 set "val1=" for /f "delims=" %%s in ('findstr /B "589" "%%~a"') do set "val1=%%s" REM 捕获第二个完全匹配"1 1,96 "的结果 set "val2=" for /f "delims=" %%s in ('findstr /X /C:"1 1,96 " "%%~a"') do set "val2=%%s" REM 合并两个结果输出为单行 if defined val1 if defined val2 echo !val1! !val2! >> All_Metadata.txt ) endlocal
关键说明
- 必须开启
enabledelayedexpansion延迟变量扩展,才能在for循环代码块内正常读取刚赋值的变量,调用变量时使用!变量名!格式而非%变量名% - 用嵌套
for /f结构捕获findstr的输出内容存入变量,避免直接输出产生的换行 - 增加非空判断,只有两个搜索都命中时才输出内容,避免生成无效空行
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

