[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

回复 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. /* ... */
复制代码
楼主需要提取哪种特定格式的字段须予明确...

TOP

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

回复 2# aloha20200628


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

TOP

本帖最后由 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
复制代码

TOP

回复 4# aloha20200628


    谢谢大佬

TOP

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

回复 4# aloha20200628


    大佬如果提取到重复的关键词,有没有什么办法直接删除呀
后续可以直接放到excel进行删除

TOP

回复 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
复制代码

TOP

回复 7# aloha20200628


    谢谢大佬!

TOP

返回列表