dos bat批处理批量获取文件名以及全路径名

@echo off&setlocal enabledelayedexpansion 
SET index=0
::用以判断字符串中是否包含对应字符串,可填写多个,用\<字符串\>表示
SET excludestr="\<bat\> \<csv\> \<xls\> \<txt\>"
echo index	filefullname	filename
echo index,filefullname,filename >> 1.csv
::获取文件名存入obj数组
for /f "delims=" %%a in ('dir /a/b/o:ed ') do ( 
	::判断%%a中是否包含对应excludestr中的字符串
	echo %%a | findstr %excludestr% >nul
	::!errorlevel! 1 不包含 0 包含
	if !errorlevel! equ 1 ( 
		set "obj[!index!]=%%a"
		set /a "index += 1"
    )
)
SET index=0
::获取文件全路径名
for /f "delims=" %%a in ('dir /s/b/o:ed ') do ( 
	echo %%a | findstr %excludestr% >nul
	::!errorlevel! 1 不包含 0 包含
	if !errorlevel! equ 1 (
		set /a "in=!index!"
		set /a "index += 1"
		::(call %%!str!%%) 代替(!!str!!)
        call echo !index!	%%a	%%obj[!in!]%%
		::追加写入到1.csv中
        call echo !index!,%%a,%%obj[!in!]%% >> 1.csv
    )
)
pause

关于其中几个点的说明,理解后可以对批处理文件进行实用性修改:

  1. @echo off&setlocal enabledelayedexpansion 启用变量延迟,在循环中对变量赋值取值所需,取值时相应的变量应当用!!包裹。
  2. for /f %%a in ('dir /a/b/o:ed ')用来获取文件名,for /f本身是较为强大的命令,这里仅仅用来处理 in()中获取到的字符串,字符串是由dir /a/b/o:ed 获取到的文件名。
  3. for /f 后"delims="作用为分割符,分割标志为=后面的内容,这里for /f “delims=” %%a in其实等同于for /f %%a in,相应的,可以再delims=后加入相应符号,对应进行分割
  4. dir /a/b/o:ed 是dir命令的一个实际应用,dir命令为dos中常用命令,作用是列出磁盘上文件目录,后面/a/b/o为对应的条件。
  5. echo %%a | findstr %excludestr% >nul 作用是判断%%a中是否包含excludestr中的内容,通过errorlevel来获取结果,1为不包含,0为包含,这里需要注意因为是循环中,必须使用!!包裹。errorlevel意义为返回上一条命令成功或者失败。需要注意的是,findstr判断是,excludestr不仅仅可以是一个单独的字符串,可以用<字符串>表示,列出像例子一样的多个字符串进行判断,只要包含其中一个就返回成功。
  6. 命令中用到了数组,数组取值时用到了!!的嵌套,然而不幸的是!!并不支持嵌套,强行写的话,会被当做前后两个变量识别。所以这里用到了call,用以代替!!,比如这里取数组中的值时,使用!obj[!in!]!,其结果只是输出了in,而!obj[!!]!不存在,则不会进行处理。使用call代替则将外层!!用%%%%替换,命令call echo !index! %%a !obj[!in!]!替换为call echo !index! %%a %%obj[!in!]%%,问题得到解决。
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章批处理基础 第一节常用批处理内部命令简介 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd 13、CALL 14、shift 15、IF 16、setlocal 与变量延迟 17、ATTRIB 显示或更改文件属性 第二节常用特殊符号 1、@命令行回显屏蔽符 2、%批处理变量引导符 3、> 重定向符 4、>>重定向符 5、<、>、<& 重定向符 6、|命令管道符 7、^转义字符 8、组合命令 9、& 组合命令 10、||组合命令 11、\"\"字符串界定符 12、, 逗号 13、; 分号 14、() 括号 15、! 感叹号 第二章FOR命令详解 一、基本格式 二、参数/d 仅为目录 三、参数/R 递归(文件名) 四、参数/L 迭代数值范围 五、参数/F 迭代及文件解析 第三章FOR命令中的变量 一、~I- 删除任何引号(\"),扩展%I 二、%~fI- 将%I 扩展到一个完合格的路径名 三、%~dI- 仅将%I 扩展到一个驱动器号 四、%~pI- 仅将%I 扩展到一个路径 五、%~nI- 仅将%I 扩展到一个文件名 六、%~xI- 仅将%I 扩展到一个文件扩展名 七、%~sI- 扩展的路径只含有短名 八、%~aI- 将%I 扩展到文件的文件属性 九、%~tI- 将%I 扩展到文件的日期/时间 十、%~zI- 将%I 扩展到文件的大小 十一、%~$PATH:I 第四章批处理中的变量 一、系统变量 二、自定义变量 第五章set命令详解 一、用set 命令设置自定义变量 二、用set 命令进行简单计算 三、用set 命令进行字符串处理 1、字符串替换 2、字符串截取 第六章if命令讲解 第一种用法:IF [NOT] ERRORLEVEL number command 第二种用法:IF [NOT] string1==string2 command 第三种用法:IF [NOT] EXIST filename command 第四种用法:IF 增强的用法 第七章DOS编程高级技巧 一、界面设计 二、if…else…条件语句 三、循环语句 四、子程序 五、用ftp 命令实现自动下载 六、用7-ZIP 实现命令行压缩和解压功能 七、调用VBScript 程序 八、将批处理转化为可执行文件 九、时间延迟 1、利用ping 命令延时 2、利用for 命令延时 3、利用vbs 延迟函数,精确度毫秒,误差1000 毫秒内 4、仅用批处理命令实现任意时间延迟,精确度10 毫秒,误差50 毫秒内 十、模拟进度条 十一、特殊字符的输入及应用 十二、随机数(%random%)的应用技巧 十三、变量嵌套与命令嵌套 1、更正了所有的错别字,适当排版,增加条理性。 2、运行改善所有例子,并纠正了一些语法错误。 3、补充了一些不完的地方。 4、第一章参考了网上许多教程汇编而成。 5、20080229 补充了变量延迟的问题。 6、20080305 修改了参数usebackq 的说明 7、20080310 增加了特殊字符的输入及应用 8、20080311 修改了子程序部分 9、20080313 修改了echo 说明,归纳了9 个应用方法 10、20080320 增加任意时间延迟方法 11、20080321 增加了set 计算中十进制与八进制混淆问题的说明 12、20080325 修正dos 数值计算范围:-2147483648 至2147483647,即-2^31~2^31-1 13、20080326 增加随机数的应用 14、20080327 修改了“if 增强用法”中的defined 语句说明 15、20080402 增加变量嵌套与命令嵌套,重要技巧之一。 正文: 第一章批处理基础 第一节常用批处理内部命令简介 批处理定义:顾名思义,批处理文件是将一系列命令按一定的顺序集合为一个可执行的 文本文件,其扩展名为BAT 或者CMD。这些命令统称批处理命令。 小知识:可以在键盘上按下Ctrl+C 组合键来强行终止一个批处理的执行过程。 了解了大概意思后,我们正式开始学习.先看一个简单的例子! @echo off echo \"欢迎来到非常BAT!\" pause 把上面的3 条命令保存为文件test.bat 或者test.cmd 然后执行, 他就会在屏幕上显示以下二行话: 欢迎来到非常BAT! 请按任意键继续. . . 这就是一个简单批处理文件了,这个批处理文件一共就用了2 条命令\"echo\" 和 \"pause\" 还有一个特殊符号\"@\" 从上面这个简单的批处理中,我们可以发现其实批处理就是运用一些含有特殊意义的符 号和一些完成指定功能的命令组合而成,那么在批处理中有多少这样的特殊符号和功能命令 呢?我们现在就来仔细了解一下一些最常用的! (以下内容来源网络,请各位仔细阅读,好进入下节的实例说明) ====================================================== 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和:: 2、ECHO 和@ 3、PAUSE 4、ERRORLEVEL 5、TITLE 6、COLOR 7、mode 配置系统设备 8、GOTO 和: 9、FIND 10、START 11、assoc 和ftype 12、pushd 和popd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值