如何在Windows CMD中过滤以引号为分隔符的特定列
在CMD中提取引号分隔的特定列的方法
CMD的for /f命令默认会把引号当作字符串界定符,没法直接将引号设为分隔符,不过可以通过以下两种方法提取引号内的目标内容:
方法一:替换引号为其他分隔符
先把原字符串中的双引号替换成逗号(或其他不冲突的字符),再用for /f按新分隔符提取目标列。
示例代码(假设目标内容存在变量LINE中):
@echo off setlocal enabledelayedexpansion set "LINE=BINARY_PATH_NAME : "C:\Program Files\Application\Application.exe" -c "C:\Program Files\Application\Application.conf" -f=false" :: 将所有双引号替换为逗号 set "TMP_LINE=!LINE:"=,!" :: 提取第2、4个逗号分隔的部分(对应exe和conf路径) for /f "tokens=2,4 delims=," %%a in ("!TMP_LINE!") do ( echo 应用程序路径:%%a echo 配置文件路径:%%b ) endlocal
方法二:分步截取引号内内容
先去掉字符串前缀,再依次提取每个引号包裹的内容:
示例代码:
@echo off setlocal enabledelayedexpansion set "LINE=BINARY_PATH_NAME : "C:\Program Files\Application\Application.exe" -c "C:\Program Files\Application\Application.conf" -f=false" :: 去掉前缀"BINARY_PATH_NAME : ",得到从第一个引号开始的内容 set "TEMP_LINE=!LINE:*: =!" :: 提取第一个引号内的exe路径 for /f "tokens=1 delims=""" %%a in ("!TEMP_LINE!") do set "EXE_PATH=%%a" :: 去掉已提取的部分,保留剩余内容 set "TEMP_LINE=!TEMP_LINE:*"=!" :: 提取第二个引号内的conf路径 for /f "tokens=1 delims=""" %%a in ("!TEMP_LINE!") do set "CONF_PATH=%%a" echo 应用程序路径:!EXE_PATH! echo 配置文件路径:!CONF_PATH! endlocal
注意事项
- 批处理中需启用
enabledelayedexpansion(延迟扩展),否则变量实时替换会失效; - 方法一适合引号数量固定的场景,方法二更灵活,可提取多个引号内的内容。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

