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

如何用批处理脚本反向提取最后5字符前至破折号的子串

用批处理脚本提取指定子串的实现方案

我来帮你搞定这个批处理提取需求!先明确核心目标:从每个文件名里,精准提取最后一个-之后、倒数第5个字符之前的内容——比如从abc-cdef-ijklm-2018.04.02-vendor1.1.0.0里抓出vendor1,完全匹配你要的结果。

完整批处理脚本

@echo off
setlocal enabledelayedexpansion

:: 替换成你的文件名列表,或者改成遍历文件夹文件的写法
set "target_files=abc-cdef-ijklm-2018.04.02-vendor1.1.0.0 abc-cdef-pqrs-2018.03.22-writer1.2.0.0 abc-cdef-lmno-2017.03.22-reader22.5.0.5"

:: 逐个处理每个文件名
for %%f in (%target_files%) do (
    set "current_name=%%f"
    :: 循环剥离最后一个-之前的所有内容
    :strip_prefix
    if "!current_name:-=!" neq "!current_name!" (
        set "current_name=!current_name:*_-=!"
        goto strip_prefix
    )
    :: 去掉最后5个字符,得到目标结果
    set "extracted=!current_name:~0,-5!"
    echo !extracted!
)

endlocal

脚本分步解释

  • @echo off:关闭命令行默认回显,让输出更整洁
  • setlocal enabledelayedexpansion:开启延迟变量扩展,确保循环内的变量修改能即时生效(批处理的常见坑点,必须开启才能正常工作)
  • set "target_files=...":把你的文件名列表存到变量里,如果需要遍历某个文件夹下的所有文件,可以把这行改成for %%f in (*) do(匹配所有文件)或者指定后缀比如(*.log)
  • 外层for循环:逐个取出列表里的每个文件名
  • :strip_prefix循环:不断剔除current_name中最后一个-之前的所有内容,直到current_name里只剩下最后一个-之后的部分(比如vendor1.1.0.0)
  • set "extracted=!current_name:~0,-5!":截取字符串从开头到倒数第5个字符的位置,也就是去掉最后5个字符,得到你要的vendor1这类结果
  • echo !extracted!:输出最终提取的内容

运行这个脚本,就能得到你想要的vendor1 writer1 reader22结果啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:23:22