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

如何用Batch脚本提取每行第n个空格与第n个连字符间的文本

Batch脚本实现指定位置文本提取

需求说明

现有文本文件内容示例:

BALL - A 5122-ABCD-STH-PC2016/A 5122 : It's a duplicate.
CIRCLE - B 612-DEFGH-STH-LAPTOP2005/B 612 : It's a duplicate.

需要用Batch脚本提取每行中第3个空格之后、第3个连字符之前的内容(不含分隔符),最终输出:

5122-ABCD
612-DEFGH

一、针对示例需求的硬编码实现

逻辑和cut -d ' ' -f 4- | cut -d '-' -f -2类似,直接针对固定次数编写脚本:

@echo off
setlocal enabledelayedexpansion

for /f "usebackq delims=" %%a in ("input.txt") do (
    :: 跳过前3个空格分割的字段,取剩余部分
    set "line=%%a"
    for /f "tokens=4* delims= " %%b in ("!line!") do (
        :: 取前2个连字符分割的字段并拼接
        for /f "tokens=1,2 delims=-" %%c in ("%%b") do (
            echo %%c-%%d
        )
    )
)

endlocal

将代码保存为extract.bat,把目标文本文件命名为input.txt放在同一目录,运行即可得到结果。

二、支持自定义次数的通用实现

如果需要灵活调整跳过的空格数、提取的连字符段数量,可通过字符串循环处理实现类似正则的灵活匹配:

@echo off
setlocal enabledelayedexpansion

:: 自定义参数:跳过前3个空格(从第4个字段开始),提取到第3个连字符前(取前2个连字符段)
set "skip_spaces=3"
set "take_hyphens=2"

for /f "usebackq delims=" %%a in ("input.txt") do (
    set "remaining=%%a"
    :: 跳过指定数量的空格分隔字段
    for /l %%i in (1,1,%skip_spaces%) do (
        for /f "tokens=1* delims= " %%b in ("!remaining!") do set "remaining=%%c"
    )
    :: 提取指定数量的连字符段并拼接
    set "result="
    for /l %%i in (1,1,%take_hyphens%) do (
        for /f "tokens=1* delims=-" %%b in ("!remaining!") do (
            if defined result set "result=!result!-"
            set "result=!result!%%b"
            set "remaining=%%c"
        )
    )
    echo !result!
)

endlocal

参数说明

  • skip_spaces=3:表示跳过前3个空格分隔的字段,从第4个字段开始处理
  • take_hyphens=2:表示提取前2个连字符分隔的字段,拼接后就是到第3个连字符之前的内容

修改这两个参数即可适配不同需求,比如要跳过2个空格、提取到第4个连字符前,就设置skip_spaces=2、take_hyphens=3。

对比其他工具实现

如果有GNU工具链,用sed/awk/cut会更简洁,对应命令如下:

# sed实现
sed -E 's/^([^ ]*[ ]){3}//' input.txt | sed -E 's/(^([^-]*[-]){1}[^-]*).*/\1/'

# awk实现
awk -F' ' '{print $4}' input.txt | awk -F'-' '{print $1 "-" $2}'

# cut实现
cut -d ' ' -f 4- input.txt | cut -d '-' -f -2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:56:09