我正在尝试将文本文件解析为批处理文件。同时用:
字符分隔符并提取值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...
其他资源: