You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10下命令行批量提取文件指定字符串间内容并保存的方案问询

Windows 10下命令行批量提取文件指定字符串间内容并保存的方案问询

嘿,我来帮你搞定这个在Windows 10命令行里提取指定内容的需求!你想要从SomeFile.txt里精准提取\StartHere\EndHere之间的所有内容,还希望能通过类似TextExtract SomeFile.txt '\StartHere' '\EndHere' SomeFile.log这样的命令行参数调用方式实现,对吧?

下面给你几种Windows 10原生可用或者轻量实现的方案,不用额外装复杂软件:

方案一:PowerShell脚本(推荐,功能强大)

Windows 10自带PowerShell,完全满足需求,而且能处理跨行内容。你可以写一个名为TextExtract.ps1的脚本,内容如下:

param(
    [string]$InputFile,
    [string]$StartString,
    [string]$EndString,
    [string]$OutputFile
)

# 读取整个文件内容为单个字符串
$content = Get-Content $InputFile -Raw
# 构建正则表达式,转义特殊字符避免出错,(?s)让.匹配换行符
$pattern = "(?s)$([regex]::Escape($StartString))(.*?)$([regex]::Escape($EndString))"

if ($content -match $pattern) {
    # 提取匹配到的中间内容并保存到输出文件
    $matches[1] | Out-File $OutputFile -Encoding utf8
    Write-Host "内容提取成功,已保存到$OutputFile"
} else {
    Write-Host "未找到指定的起始或结束字符串,请检查参数是否正确"
}

调用方式:

  • 如果在CMD命令提示符里调用:
    powershell -ExecutionPolicy Bypass -File TextExtract.ps1 SomeFile.txt '\StartHere' '\EndHere' SomeFile.log
    
  • 如果直接在PowerShell窗口里调用:
    .\TextExtract.ps1 SomeFile.txt '\StartHere' '\EndHere' SomeFile.log
    
    (如果遇到执行权限问题,可以先运行Set-ExecutionPolicy RemoteSigned,按提示确认即可)

方案二:纯CMD批处理脚本(适合简单场景)

要是你习惯用原生CMD批处理,也可以写一个TextExtract.bat,不过这个方案是逐行处理的,适合起始和结束字符串单独占一行的场景:

@echo off
setlocal enabledelayedexpansion

:: 接收命令行参数
set "InputFile=%~1"
set "StartString=%~2"
set "EndString=%~3"
set "OutputFile=%~4"

:: 标记是否进入目标内容块
set "inBlock="
:: 先清空输出文件(如果存在)
del "%OutputFile%" 2>nul

:: 逐行读取输入文件
for /f "delims=" %%a in ('type "%InputFile%"') do (
    if defined inBlock (
        :: 检查当前行是否是结束标记
        echo "%%a" | findstr /c:"%EndString%" >nul
        if not errorlevel 1 (
            set "inBlock="
        ) else (
            :: 写入当前行到输出文件
            echo %%a>>"%OutputFile%"
        )
    ) else (
        :: 检查当前行是否是起始标记
        echo "%%a" | findstr /c:"%StartString%" >nul
        if not errorlevel 1 (
            set "inBlock=1"
        )
    )
)

endlocal
echo 处理完成,请查看%OutputFile%

调用方式:

直接在CMD里运行:

TextExtract.bat SomeFile.txt \StartHere \EndHere SomeFile.log

方案三:第三方工具(可选)

如果你愿意安装轻量第三方工具,比如GnuWin32的grep,可以用一行命令搞定:

grep -A 999999 "\StartHere" SomeFile.txt | grep -B 999999 "\EndHere" | head -n -1 | tail -n -1 > SomeFile.log

不过这个需要额外下载安装工具,不如前两种方案方便。

总结一下,PowerShell脚本是最推荐的选择,它能处理跨行内容,对特殊字符的兼容性也更好,完全满足你的参数调用需求。

备注:内容来源于stack exchange,提问作者digital-Ink

火山引擎 最新活动