解析文本文件并在批处理文件中分隔符:字符

解析文本文件并在批处理文件中分隔符:字符

我正在尝试将文本文件解析为批处理文件。同时用:字符分隔符并提取值PageLabelPrefix并将其放入list.txt

看上去只有%%g有价值,其余%%h都是空的。

一直在论坛和帮助中搜索。不知道问题出在哪里。

我的批处理文件:

@echo off

for /F "delims=:" %%g in ('type "%cd%\data-info.txt"') do (
    if %%g == PageLabelPrefix echo %%g %%h >> list.txt
   )

以下是我的data-info.txt

PageLabelNewIndex: 1
PageLabelStart: 1
PageLabelPrefix: Sheets: 204 - TYPE A - ATTIC CONCRETE BODY PLAN�
PageLabelNumStyle: NoNumber
InfoBegin
InfoKey: creator_version
InfoValue: 2022

答案1

您的代码中有两个问题:

  • tokens=除了缺少 FOR /F 命令之外delims=
  • :文本中的某些行中还发现了冒号( )分隔符。

添加tokens=参数将解决问题%%h

但是,对于以下行:

PageLabelPrefix: Sheets: 204 - TYPE A - ATTIC CONCRETE BODY PLAN�

您的代码将返回:

PageLabelPrefix Sheets

如果这不是您想要的结果,您可能需要重新考虑您的批处理文件。

参考 : FOR /F 命令

答案2

这是我的最后一次迭代。

if exist list.txt (del list.txt)
for /F "tokens=1,2,3,4,5 delims=:" %%g in ('type "%cd%\data-info.txt"') do (if %%g == PageLabelPrefix echo %%h %%i >> list.txt)

答案3

>.\list.txt (for /f tokens^=1-2^delims^=:^  %g in ('find "PageLabelPrefix" /i ^<".\data-info.txt"')do echo/ %g %h)
@echo off && cd /d "%~dp0"

>.\list.txt (
     for /f tokens^=1-2^delims^=:^  %%g in ('find "PageLabelPrefix" /i ^<".\data-info.txt"
           ')do echo/ %%g %%h
        )

观察1:有两个空格:

...delims^=:^SpaceSpace%%g in (...

观察2:您不需要if exist file (do)删除该文件,因为无论是否存在,您都可以直接使用>file.extension (command in block)

if exist list.txt (del list.txt)

:: use >.\redirect_to_file.log (from block) ::
>log.txt ( 
       for ... ()do echo/ %%g %%h
     )

观察3:您可以type使用直接命令替换,该命令使用以下命令过滤文件中的目标字符串find "strings" <file.txt

for ...('type "%cd%\data-info.txt"') do (if %%g == PageLabelPrefix echo...)

:: use find "strings" ^<.\"File.eXtension" ::
for ...('find "PageLabelPrefix" /i ^<".\data-info.txt"')do...


其他资源:

相关内容