Board logo

标题: [文本处理] 求助BAT脚本批量提取.h文件中包含*的字符串并放到指定文件中 [打印本页]

作者: 438050057    时间: 7 天前 11:57     标题: 求助BAT脚本批量提取.h文件中包含*的字符串并放到指定文件中

各位大佬,场景是这样,现在有一个文件夹中存在大量.cpp和.h文件,我想将文件夹中.h文件中包含有“*”字符的字符串全部提取出来并放到一个指定的文件中(txt啥的都可以)
比如:
#define _TR_DynaRWP_Name "*RIGIDWALL_PLANAR"
我想提取其中的*RIGIDWALL_PLANAR这种关键词
这个该如何实现呀
作者: aloha20200628    时间: 7 天前 14:35

回复 1# 438050057

*.h 文件中包含多种有 * 字符的文本行包括注释段落,如下
  1. ...
  2. #define _TR_DynaRWP_Name "*RIGIDWALL_PLANAR"
  3. #define __TRY__ void __try__(void**), *_sehrec[6]; __try__(_sehrec);
  4. typedef struct localeinfo_struct _locale_tstruct,*_locale_t;
  5. _CRTIMP char *_cgets(char *_Buffer);
  6. /* ... */
复制代码
楼主需要提取哪种特定格式的字段须予明确...

作者: 438050057    时间: 7 天前 17:09

本帖最后由 438050057 于 2025-1-15 17:12 编辑

回复 2# aloha20200628


    是我想的不够周到 ,主要是就是提取以*开头的关键词,不知道您了解lsdyna吗,格式大概就是 “*”+“一组特定的字符”
主要就是想提取这一种,比如*node,*part,*contact这样子的
可以确定的是需要提取的带*关键词一定会定义在#define之后,会和#define同行,也可以说需要提取的*是一组字符串,string类型的常量
作者: aloha20200628    时间: 7 天前 20:18

本帖最后由 aloha20200628 于 2025-1-15 20:57 编辑

回复 3# 438050057

以下代码捕获当前目录下 *.h 文件(假定是 ansi 或 gb2312 编码)中所有形如 #define ...."xxx" 格式的文本行,提取其中的 xxx 字段并输出到 all.txt 文件...
  1. @echo off &(for /f "delims=" %%F in ('dir /b/a-d *.h') do for /f tokens^=2^delims^=^" %%v in (
  2.   'findstr /irc:"#define .*\".*\"" "%%F" ') do (
  3.   set "v=%%v" &setlocal enabledelayedexpansion &if "!v:~,1!"=="*" echo,%%v&endlocal))>all.txt
  4. type "all.txt"&pause&exit/b
复制代码

作者: 438050057    时间: 7 天前 21:03

回复 4# aloha20200628


    谢谢大佬
作者: 438050057    时间: 7 天前 21:41

本帖最后由 438050057 于 2025-1-15 21:45 编辑

回复 4# aloha20200628


    大佬如果提取到重复的关键词,有没有什么办法直接删除呀
后续可以直接放到excel进行删除
作者: aloha20200628    时间: 6 天前 14:34

回复 6# 438050057

以下版本可在批处中直接过滤重复字符串,但不区分大小写
  1. @echo off &(for /f "delims=" %%F in ('dir /b/a-d *.h') do for /f tokens^=2^delims^=^" %%v in (
  2.   'findstr /irc:"#define .*\".*\"" "%%F" ') do if not defined _#%%v (
  3.   set "_#%%v=1" &set "v=%%v" &setlocal enabledelayedexpansion &if "!v:~,1!"=="*" echo,%%v&endlocal))>all.txt
  4. type "all.txt"&pause&exit/b
复制代码
如须区分大小写,可用以下版本,但须从本坛第三方下载 gawk.exe v4.1.3版本,落地即用,与批处脚本和 *.h 文件同目录(http://bcn.bathome.net/s/tool/index.html?key=gawk
  1. @echo off &(for /f "delims=" %%F in ('dir /b/a-d *.h') do for /f tokens^=2^delims^=^" %%v in (
  2.   'findstr /irc:"#define .*\".*\"" "%%F" ') do (
  3.   set "v=%%v" &setlocal enabledelayedexpansion &if "!v:~,1!"=="*" echo,%%v&endlocal))>0.0
  4. endlocal &gawk "!a[$0]++" "0.0">all.txt
  5. del /q "0.0" &type "all.txt" &pause &exit/b
复制代码

作者: 438050057    时间: 6 天前 15:12

回复 7# aloha20200628


    谢谢大佬!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2