Windows Batch提取文本首个引号内内容的等效实现方法
Windows Batch 实现提取首个引号内内容的方案
需求说明
需要从文本文件(示例内容如下)中提取首个引号内的内容(即10 Ursae Majoris),忽略后续引号中的内容:
17,60,"10 Ursae Majoris",0.03125,34.90625,-39.09375,0,0,176,None,5,None,64,Anarchy,10,None,,,,0,1678643440,1678643440,"10 Ursae Majoris",,,,3,Common,2415659059555
原类Linux代码无法在Windows Batch环境运行:
echo off for /f "delims=," %%i in (systems.txt) do echo %%i | grep -o '([^""]*)' | head -1
等效Windows Batch实现
以下是两种可行的实现方式:
方法一:字符串截取与替换法
@echo off setlocal enabledelayedexpansion for /f "delims=" %%a in (systems.txt) do ( set "line=%%a" :: 截掉第一个引号及之前的所有内容 set "temp=!line:*"=!" :: 以引号为分隔符,提取第一段内容 for /f "delims="" %%b in ("!temp!") do echo %%b ) endlocal
方法二:结合findstr正则匹配
@echo off for /f "delims=" %%a in (systems.txt) do ( echo %%a | findstr /r /c:"\"[^\"]*\"" | for /f "delims="" tokens=2" %%b in ('more') do echo %%b )
说明
- 方法一通过延迟变量扩展实现两次字符串截取,逻辑直观高效,无需依赖外部工具。
- 方法二借助
findstr的正则匹配定位首个引号对,再通过for循环提取中间内容,适合熟悉正则语法的场景。
内容的提问来源于stack exchange,提问作者Franklyn W. R. Tigier
相关产品推荐
相关产品推荐

