问题分析:该任务主要有三个问题要解决1)如何存放指定的文件夹,2)如何遍历文件夹下的所有文件;3)如何将遍历的文件输出到文件中。下面就逐一来解决这些问题。
问题解决:
1. 如何存放指定的文件夹
在Shell中主要通过set 来存放环境变量。比如:Set var=xxxx。如果要删除该变量,则使用Set var=。在shell脚本中并没有类似数组这样的变量来帮助你存放数据。所以只能考虑将几个文件名放到一个string中,然后通过字符串识别来分别读出这些变量。示例如下:
SET DirList=C:/A C:/B C:/D
FOR /D %%i IN (%DirList%) DO ECHO %%i (如直接在命令行输入,%%i应写为%i)
利用FOR语句就可以分别读出C:/A,C:/B和C:/D。此处也算是对FOR /D命令的一种灵活运用了。当然除此之外,也可以将变量存放于某文件,然后再循环读出,此处就不再详细说明了。
上面的语句还有些不完善的地方,那就是不支持文件名中出现空格的情况。比如C:/D E, 这种情况,命令只能识别出空格前的部分,造成文件名错误。避免这种情况的方法就是用引号把文件名包起来,如下所示:
SET DirList=”C:/A” “C:/B” “C:/D E”
2. 如何遍历文件夹中的所有文件呢?
解决了多个文件夹名存放的问题,现在需要遍历文件夹了。幸运的是shell为我们提供了一个命令可以方便的遍历完文件夹中的文件。命令如下:
FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
于是很自然的想到了如下的语句:
SET
DirList
=
”C:
A” “C:
B” “C:
D E”
FOR / D %%m IN ( %DirList% ) DO (
FOR / R %%m %%i IN ( * ) DO ECHO %%i
)
FOR / D %%m IN ( %DirList% ) DO (
FOR / R %%m %%i IN ( * ) DO ECHO %%i
)
但不幸的是,这个脚本运行时出错。主要问题就是在第二个FOR语句中并不支持%%m, 在path位置上出现%%m让FOR有点不知所措。于是我们想到是否可以先把%%m赋值给一个变量,然后再将变量用于FOR语句。修改后结果如下:
SET
DirList
=
”C: