You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批处理中如何提取指定变量间的目标子字符串?

Windows批处理:从变量中提取指定子串(基于前后标记)

嘿,我来帮你搞定这个Windows批处理的字符串提取需求!不用任何文件操作,纯靠变量处理就能实现你要的效果。先看完整的实现代码:

@echo off
setlocal enabledelayedexpansion

:: 你的原始变量(先去掉引号避免干扰)
set "CMS_SQL=cms91_to_913.json cms913_to_9132.json cms9132_to_9133.json cms9133_to_10100.json"
set "CMS_FROM_VERSION=cms913_"
set "CMS_TO_VERSION=to_9133.json"

:: 第一步:剔除CMS_FROM_VERSION之前的所有内容
set "temp_str=!CMS_SQL:*%CMS_FROM_VERSION%=!"

:: 第二步:剔除CMS_TO_VERSION之后的所有内容,保留中间部分
set "result=!temp_str:%CMS_TO_VERSION%=&rem !"
call set "result=%%result%%"

:: 输出结果
echo 提取到的目标子串:!result!
endlocal

代码原理拆解:

  1. 开启延迟变量扩展:setlocal enabledelayedexpansion 是关键,它允许我们在同一代码块里多次修改和读取变量值,避免批处理的变量替换时机问题。
  2. 截断前缀:!CMS_SQL:*%CMS_FROM_VERSION%=! 是批处理的字符串替换语法,*表示匹配任意字符直到CMS_FROM_VERSION出现的位置,然后把这部分替换为空,这样就得到了从cms913_开始的剩余字符串。
  3. 截断后缀:!temp_str:%CMS_TO_VERSION%=&rem ! 把to_9133.json替换成&rem ,rem是批处理的注释命令,会忽略后面的所有内容。接着用call set "result=%%result%%"让批处理重新解析这个字符串,自动去掉注释部分,最终就得到了你要的cms913_to_9132.json cms9132_to_9133.json。

如果你的原始变量是带引号定义的(比如set CMS_SQL="..."),只需要在开头加一行去掉引号的处理:

set "CMS_SQL=!CMS_SQL:"=!"
set "CMS_FROM_VERSION=!CMS_FROM_VERSION:"=!"
set "CMS_TO_VERSION=!CMS_TO_VERSION:"=!"

内容的提问来源于stack exchange,提问作者Dom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:18:57