用批处理获取当前目录下所有文件的路径

例一 (强)

@echo off & setlocal EnableDelayedExpansion
for /f "delims=" %%i in ('"dir /a/s/b/on *.*"') do (
set file=%%~fi
set 不要这行file=!file:%cd%/=!
set file=!file:/=/!
echo !file! >> 内容.txt
)


可以将所有文件相对于搜索路径(当前目录)的相对路径输出,但是也同时将所有目录进行输出了。

参考了论坛上另外一个帖子:如何判断参数是文件还是目录
http://www.cn-dos.net/forum/view ... =%E5%88%A4%E6%96%AD

   判断是否存在目录: if exist "%~f1/" ...
   判断是否存在文件: if exist "%~f1" if not exist "%~f1/"...

写了如下的批处理:文件列表输出至file.txt,目录列表输出至directory.txt

例二

@echo off
::for /r /d %%d in (*.*) do if exist "%%d/*.*" echo %%d >>content.txt
for /f %%i in ('"dir /a /s /b *.*"') do call :next "%%i"
pause
goto :eof

:next
set jpg=%1
set cd1=%cd:/=/%
set jpg=%jpg:/=/%
rem echo %%jpg:%cd1%=%% | findstr .
for /f %%j in ('"echo %%jpg:%cd1%=%% | findstr . "') do set last=%%j
set last=%last:"=%
call :checkFD %last%
echo %last% >> content.txt
goto :eof


:checkFD
if exist "%~f1/" echo %1>>directory.txt
if exist "%~f1" if not exist "%~f1/" echo %1>>file.txt
goto :EOF

例三

@echo off
FOR %%a IN (C: D: E: F:) DO cd /d %%a & for /r %%b in (desktop.ini) do if exist %%b echo %%b
pause

=====================================================================

集合

(一)概述

FOR命令常见的三种表达方式:IN (Command1)、 IN (集合)、 IN (Set)。
集合,也称集。在批处理里,它确定一个范围、总量,是一个数据库,由固定数值(元素)组成,向变量提供固定数值,用于替换变量。变量和集合的关系是需求与供给的关系。集合的个数决定了需要循环的次数。
集合必须用圆括号括起来。
集合里的内容包罗万象。可以是单个字符,也可以是字符串,可以是文件,也可以是命令。我们见得最多有:
路径+文件名:如c:/note.txt
文本:如歌曲列表.txt
字词:如我爱北京天安门
数字:如123
符号:如+、-、*、/
命令:如’set’

盘符:如c:/
还有时间、进程、注册表、服务、内存管理、启动等等。
集合里可以是只有一个元素(数值),如:“我爱北京天安门”
也可以有多个,如:“c: d: e: f:”
甚至所有、全部,如:*.*
可以确指,如“我爱北京天安门”
也可以是模糊的,如:w?s.*

(二)FOR与文件查询

由于FOR也可以用来查询文件,FOR结合通配符查询文件的功能要比DIR强得多,因此有必要结合通配符来谈谈FOR命令。

通配符(?和*)常用来代替未具体指明的文件和数据。
?代表单个字符。
* 代表全部字符。
将通配符用于集合内,FOR可以展现强大的搜索能力。

1、查询当前目录(批处理命令所在的位置)的所有文件:

@echo off
for %%i in (*.*) do echo "%%i"
pause

讲解:
*.*的第一个星号表示文件名,第二个星号表示扩展名,整体表示所有类型的文件。

2、列举当前目录下所有扩展名为txt的文件:

@echo off
for %%i in (*.txt) do echo "%%i"
pause

讲解:
*.txt表示所有扩展名为txt的文件,也就是所有文档(记事本)文件了。

3、查询txt和doc两种类型的文档:

@echo off
for %%i in (*.doc *.txt) do echo "%%i"
pause

讲解:
集合里包含两个元素*.doc和*.txt,两者之间六个空格。*.doc是所有WORD文档。

4、查询文件名只有两个字符的文档:

@echo off
for %%i in (??.txt) do echo %%i
pause

讲解:
??表示两个字符,也就是文件名只有两个字母或两个汉字了的文档。

5、查询文件名第二个字母为O的mp3文件:

@echo off
for %%i in (?o*.mp3) do echo %%i
pause

讲解:
?和o存在先后顺序,?是第一个字符,o是第二个字符,*代表剩余的字符。

6、查询以F开头的文件:

@echo off
for %%i in (F*.*) do echo %%i
pause

讲解:
F*.*T表示文件名以“F”开头,扩展名以“T”结尾的文件。

7、查询含有字母F的文件:

@echo off
for %%i in (*F*) do echo %%i
pause

讲解:
文件名含有字母“F”,但不包括文件夹在内。

8、查询C盘下的所有文件,不包括子目录:

@echo off
for %%i in (c:/*) do echo %%i
pause

9、查询C盘下的所有文件,包括子目录:

@echo off
For /r c:/ %%i in (*) do echo %%i
Pause

10、查询C盘下的所有文件夹,包括子目录:

@echo off
For /r c:/ %%i in (.) do echo %%i
Pause
讲解:
如果集合只是一个句点 (.),则只枚举目录树。
似乎除了*,使用其他字符搜索到的都是目录,但文件夹后面都跟了一个点号。

11、全盘搜索文件desktop.ini:

@echo off
FOR %%a IN (C: D: E: F:) DO cd /d %%a & for /r %%b in (desktop.ini) do if exist %%b echo %%b
pause

注意:
凡是涉及D盘的都搜索不出来,而我的大部分exe都放在D盘,D盘又没设保护,为什么?
涉及长文件名,中间有空格亦无法start。如:C:/Program Files,如何解决?

12、搜索F盘mp3文件:

@echo off
for /r f:/ %%i in (*.mp3) do echo %%i>>music.txt
pause>nul

讲解:
将搜索到的mp3文件保存到music.txt文档中。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值