我正在尝试创建一个批处理文件来解析降价文件,并创建一个包含两个特定块之间代码的文本文件。
# 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.
我正在考虑在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 循环中解决,但我没有批处理经验。
这应该可以解决问题:
@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
)
)
##
- 如果是,则设置一个标志。##
并且标志已经设置 - 取消设置它以便只考虑第一个 ##
。评论:
if (not) defined
检查标志 - 检查 %dependencies%
将返回一个空字符串%%~j
代替 %%j
echo(
平淡echo
由于多种原因echo
之前重定向,这样就不会打印不必要的空格