::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::: 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来处理,总之,看个人喜欢了
|