用批处理文件解析 markdown 文件

问题描述 投票:0回答:1

我正在尝试创建一个批处理文件来解析降价文件,并创建一个包含两个特定块之间代码的文本文件。

我的降价文件看起来是这样的:

# Dependencies
## Python Packages
- pytube==15.0.0
- moviepy==1.0.3
- keyboard==0.13.5
- pyinstaller==5.10.1
## UPX Version
- UPX==4.0.2--win64

我希望批处理代码在 ## Python Packages 之后和下一个 ## 之前获取行,忽略连字符,并写入一个文本文件,requirements.txt 看起来像:

pytube==15.0.0
moviepy==1.0.3
keyboard==0.13.5
pyinstaller==5.10.1

要解析文件,我的批处理代码如下所示:

@echo off
for /F "tokens=2,3" %%i in (dependencies.md) do call :process %%i %%j %%k

:process
set VAR1=%1
set VAR2=%2
@echo %VAR1%
@echo %VAR2%

这输出:

Dependencies
k
Python
Packages
pytube     
15.0.0     
moviepy    
1.0.3      
keyboard   
0.13.5     
pyinstaller
5.10.1     
UPX
Version
UPX
4.0.2--win64
ECHO is off.
ECHO is off.
  1. 不知道怎么用
  2. 包含不必要的信息

我正在考虑在Packages之后和UPX之前解析所有内容,但这似乎效率不高。

通常我会写一个文本文件:

Set out="."
(
    Echo;pytube==15.0.0
    Echo;moviepy==1.0.3
    Echo;keyboard==0.13.5
    Echo;pyinstaller==5.10.1
) > "%out%\requirements.txt"

我觉得这可以在 for 循环中解决,但我没有批处理经验。

batch-file
1个回答
0
投票

这应该可以解决问题:

@echo off & setlocal

:: Empty the contents of the file - just for testing this script
type nul >"requirements.txt"

:: Unset the flag if for some reason it's been set beforehand
set dependencies=

:: Tokenize the contents - everything after the first delimiter
:: (in this case space) will be contained in the second token (%%j)
for /f "tokens=1,*" %%i in (dependencies.md) do (
    if "%%~i"=="##" (
        if not defined dependencies (
            set "dependencies=true"
        ) else (
            set "dependencies="
        )
    ) else if defined dependencies if "%%~i"=="-" (
        >>"requirements.txt" echo(%%~j
    )
)
  1. 检查第一个标记是否为
    ##
    - 如果是,则设置一个标志。
  2. 如果它是
    ##
    并且标志已经设置 - 取消设置它以便只考虑第一个
    ##
  3. 否则,如果设置了标志并且第一个标记是连字符,则将第二个标记的内容回显到文件中。

评论:

  • 因为解析器立即评估 for 循环,我们必须通过
    if (not) defined
    检查标志 - 检查
    %dependencies%
    将返回一个空字符串
  • 如果第二个标记的内容在双引号中,则使用
  • %%~j
    代替
    %%j
  • echo(
    平淡
    echo
    由于多种原因
  • echo
    之前重定向,这样就不会打印不必要的空格
© www.soinside.com 2019 - 2024. All rights reserved.