问题描述:给定一个文件夹,文件夹内有很多文件和子文件夹。现在要找出文件夹下所有的C源码文件,对文件进行处理,去除预处理命令,并在C文件的文件夹下生成新的处理后的源码文件。
之所以有这样的问题,是因为在windows中下载的clang编译器没有配置好,编译时找不到头文件。。。没办法只能暂时先去掉C文件的include命令再进行编译了。
批处理代码如下:
setlocal ENABLEDELAYEDEXPANSION
@echo off
for /r %1 %%i in (*.c) do (
set path=%%~dpi
set file=%%~nxi
set name=%%~ni
cd !path!
for /f "tokens=* delims=" %%j in (!file!) do (
set row=%%j
if not "!row:~0,1!"=="#" (
@echo;!row!>>!name!%2.c
)
)
)
将以上代码保存到一个批处理文件processCFile.bat中。
简单说来,这段代码的核心是个双重循环,外层循环递归搜索文件夹,找出C文件。找出后内层循环逐行处理C文件,将不是预处理命令的代码行输出到新的文件中。
这里的%1是要搜索的文件夹,%2是新生成的文件的后缀。条件判断语句内部有一个echo;
之所以加了分号,是为了能够输出空字符串(即字符串里只有空字符);否则,!row!
为空字符串的话会输出ECHO 处于打开/关闭状态。
关于echo输出空格行还有多种方法,具体内容参见echo输出空格行
调用这个批处理文件的代码如下:
call processCFile.bat E:\Pangeneral\Leetcode CLONE
命令执行后,在C文件所在文件夹内生成了新的C文件,新的C文件中不包含预处理命令。