查看: 1047|回复: 0
打印 上一主题 下一主题

用批处理来自动生成IAR工程头文件包含目录

[复制链接]
跳转到指定楼层
沙发
发表于 2016-4-16 21:14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::            NOTE                 :::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:: 简要说明:本批处理递归查找当前目录下包含H文件的目录,并将路径名写入HeadDirFile.txt文件中
::           路径为相对路径,以批处理所在的目录为起始路径
:: 使用方法:将批处理文件放到需要查找的文件夹根目录下,然后双击批处理文件,运行即可
::               
::               运行开始时,提示界面为:processing....
::               
::               运行结束时,提示界面为:Congratulations! Work is done
::
:: 注意事项:
:: note 1:   如果需要查找其它后缀文件所在的目录,只需要将note 1对应行的*.h修改为对应名字即可
::           example:你需要查找后缀为txt文件所在的目录,只需将*.h改为*.txt就ok啦
::
:: note 2:   本批处理默认输出相对目录名,也可以修改note 2处的代码来输出其它格式的文本
::           example:你需要输出完整路径,则需要将note 2中的%%~pi修改为%%i即可
::
:: note 3:   note2 中的参数如下所示
::
::           %%~I          - 删除任何引号("),扩展 %I
::           %%~fI        - 将 %I 扩展到一个完全合格的路径名
::           %%~dI        - 仅将 %I 扩展到一个驱动器号
::           %%~pI        - 仅将 %I 扩展到一个路径
::           %%~nI        - 仅将 %I 扩展到一个文件名
::           %%~xI        - 仅将 %I 扩展到一个文件扩展名
::           %%~sI        - 扩展的路径只含有短名
::           %%~aI        - 将 %I 扩展到文件的文件属性
::           %%~tI        - 将 %I 扩展到文件的日期/时间
::           %%~zI        - 将 %I 扩展到文件的大小
::           %%~$PATH:I   - 查找列在路径环境变量的目录,并将 %I 扩展
::                          到找到的第一个完全合格的名称。如果环境变量名
::                          未被定义,或者没有找到文件,此组合键会扩展到
::                          空字符串
::
::           可以组合修饰符来得到多重结果:
::
::           %%~dpI       - 仅将 %I 扩展到一个驱动器号和路径
::           %%~nxI       - 仅将 %I 扩展到一个文件名和扩展名
::           %%~fsI       - 仅将 %I 扩展到一个带有短名的完整路径名
::           %%~dp$PATH:I - 搜索列在路径环境变量的目录,并将 %I 扩展
::                          到找到的第一个驱动器号和路径。
::           %%~ftzaI     - 将 %I 扩展到类似输出线路的 DIR
::
:: Hope you enjoy it , thank you ^_^
::                                                          xuesong 2012-05-01



::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::::::::::::::::            Below is code      :::::::::::::::::::::::::::::::::::
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::


@ECHO off
ECHO processing....

ECHO  ============================================================================    > HeadDirFile.txt
ECHO  @brief  list the dir which contains a h file in current root directory                                                                                    >> HeadDirFile.txt
ECHO  @author xuesong                                                                                                                                                      >> HeadDirFile.txt
ECHO  @time  %date%----%time%                                                                                                                                       >> HeadDirFile.txt
ECHO  ============================================================================   >> HeadDirFile.txt

::note 1
FOR /R  %%i IN (*.h) DO (                                                            
::note 2
    IF EXIST %%i (ECHO %%~pi >> tmp)                                                
)

FOR /F "delims=" %%i IN (tmp) DO (
IF NOT DEFINED %%i SET %%i=A & ECHO %%i>>HeadDirFile.txt)

DEL tmp

ECHO Congratulations! Work is done
pause
前言:
      从接触AVR至今,一直使用IAR,IAR的简洁高效,令人印象深刻,其优点很多,在此就不罗嗦啦
      每次新建工程后,需要添加头文件路径时就很纠结,手工添加太麻烦,就想有没有自动生成的工具呢?在网上找了很久,没找到最近在公司实习,发现dir /s /b *.h命令可以递归输出当前目录下所有的H文件路径,于是想能不能利用DOS工具来自动处理呢?趁着51放假3天学习了下批处理,动手写个批处理文件,可以完美解决这个问题啦
     先说说批处理的思路:利用批处理的for /R 语句来遍历目录,发现*.h文件后,则将其相对路径追加到一个文件中,这样遍历完后,便得到一个包含所有H文件所在目录的文件,但是这个目录有重复项,比如A目录下有3个H文件,则会输出3此A目录,所以下一步就是
要去除文件中的重复项,删去重复项后,便得到所需要的目录路径啦
    举个例子来说,这样更清晰些:比如我的电脑上mp3工程代码目录如下所示
E:.
+---APP
|   \---new
|      \---ddd
|          +---dddas
|          \---ddddafffff
+---CMSIS
|  +---CoreSupport
|  \---DeviceSupport
+---CONFIG
+---FATFS
|  \---option
+---FWLIB
|   +---inc
|   \---src
+---GUI
+---IAR
|  +---Debug
|   |  +---Exe
|   |  +---List
|   |  \---Obj
|   \---settings
+---LED
+---LRC
+---MP3
+---OUTPUT
+---SD
\---USART


将批处理文件放在根目录下,可以自动生成包含头文件的目录路径,如下所示,
需要说明的是:生成文件中前面的注释部分是我添加的说明,你可以自己修改为自己喜欢的样式,^_^
============================================================================   
@brief list the dir which contains a h file in current root directory         
@author xuesong                                                               
@time 2012/05/01 周二----17:07:06.65                                                      
============================================================================   
\mp3\APP\
\mp3\APP\new\ddd\dddas\
\mp3\APP\new\ddd\ddddafffff\
\mp3\CMSIS\DeviceSupport\
\mp3\CONFIG\
\mp3\FATFS\
\mp3\FWLIB\inc\
\mp3\LED\
\mp3\MP3\
\mp3\SD\
\mp3\USART\

得到该文件后,怎么得到IAR需要的样式呢?有很多种方法,比如用ultraedit的宏功能,先处理第一个路径,然后重复N此宏就ok啦,也可以用VIM来处理,总之,看个人喜欢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

快速回复 返回顶部 返回列表