需求:批处理打开指定路径下的所有文件
前提:默认各位同学已经熟悉常用的各种批处理命令,本文仅对涉及到的批处理命令做简单的介绍,有需要进一步学习,可查阅网上其它资料。也可通过CMD命令行窗口通过 [命令] + /? 方式获取命令的详细信息及帮助。

一、需求功能分析

需求:通过批处理脚本逐个打开指定路径文件夹下的所有文件。拆分明确的功能点如下:
功能点1:命令行窗口输入指定的文件夹路径
功能点2:遍历文件夹中的所有文件
功能点3:打开每次遍历的文件
清晰了每一个子功能点,现在使用学习过的批处理命令来实现就很容易啦,代码思路也是比较清晰的。

题外话:这里也建议每一位初学者,养成良好的习惯,不要一上来就猛干代码,拿到任何一份需求,首先要捋清楚功能点以及实现思路,即使在大脑中简单地过一遍也可以,最好在纸上画一下必要的思维导图。(当然,网上也有很多画思维导图工具,不一定要写在不便保存的纸上,这里就不一一介绍啦)

二、实现功能点命令

(1)功能点1:命令行窗口输入指定的文件夹路径,也可直接在代码中写死,本文中为方便扩展,采取输入方式获取文件夹路径,使用SET 命令设置变量。

设置变量的值:SET [变量名]=[值]
举例:set var=5  将var变量的值设置为数字5

命令行窗口输入方式设置变量的值:SET /P [变量名]=[命令行窗口输入的值]
举例:set /p var=Please Input Value : 如果窗口输入 Hello World ,则将var变量的值设置为字符串Hello World,等于号后面的Please Input Value :起提示作用,不计入变量值

数学表达式设置变量的值:SET /A [变量名]=[数学表达式]
举例:set /a var=4+5 将var变量的值设置为数学表达式的运算结果数字9

功能点实现代码:set /p folder_path=Please Input Folder Path :(也可写死:set folder_path=E:\TestFile 假设已明确文件夹路径为 E:\TestFile)

(2)功能点2:遍历文件夹中的所有文件,使用FOR命令遍历文件夹及其子文件下的所有文件。

FOR [参数] %%变量名 IN (通配符) DO [执行的命令]
[参数]:/D、/R、/L、/F和无参数一共有5种取值
/D:遍历当前路径下的所有文件夹
/R [路径]:深度遍历指定路径下的所有文件,如果没有指定路径则默认在当前路径
/L:需要结合(通配符)一起使用,此时括号内的用法规则为(start, step, end)相当于java语言中的for语句
/F:用于解析文件中的内容
举例:for %%i in (*) do ( echo %%i ) 遍历当前路径下的所有文件并将所有文件名输出到窗口
举例:for /d %%i in (*) do ( echo %%i ) 遍历当前路径下的所有文件夹并将文件夹名输出到窗口
举例:for /r %%i in (*) do ( echo %%i ) 深度遍历当前路径下的所有文件并将文件名绝对路径输出到窗口
举例:for /r E:\TestFile %%i in (*) do ( echo %%i ) 深度遍历E:\TestFile路径下的所有文件并将文件名绝对路径输出到窗口
举例:for /l %%i in (0, 1, 5) do ( echo %%i ) 从0递增到5,递增步长为1
举例:for /f %%i in (E:\test.txt) do ( echo %%i ) 解析E:\test.txt文件内容输出到窗口

功能点实现代码:for /r [指定文件夹路径] %%i in (*) do (执行的命令)

(3)功能点3:打开每次遍历的文件(功能并非一次性全部打开,为避免一次性打开过多文件导致系统内存溢出,故采取逐个打开的方式),使用START命令打开文件。

START ["标题"] [参数] [待打开文件的绝对路径]
[参数]:/I、/MIN、/MAX、/SEPARATE、/SHARED、/LOW、/NORMAL、/HIGH等取值
/I:新的环境将是传递给 cmd.exe 的原始环境,而不是当前环境
/MIN:以最小化方式启动窗口。
/MAX:以最大化方式启动窗口。
/SEPARATE:在单独的内存空间中启动 16 位 Windows 程序
/SHARED:在共享内存空间中启动 16 位 Windows 程序
/LOW:在 IDLE 优先级类中启动应用程序
/NORMAL:在 NORMAL 优先级类中启动应用程序
/HIGH:在 HIGH 优先级类中启动应用程序
举例:start E:\test.txt 默认方式打开文本文件
举例:start /min E:\test.txt 已最小化方式打开文本文件
举例:start /max E:\test.txt 已最小化方式打开文本文件

功能点实现代码:start [指定文件]

三、实现的批处理脚本

批处理 打开java程序 批处理打开文件_batch命令


批处理脚本详细解析如下:其中::双冒号后的内容为注释

(1)title Open File Script 批处理打开的窗口显示的标题为“Open File Script”

(2)set /p folder_path=Please Input Folder Path : 则将folder_path变量的值设置为命令行窗口待输入字符串,等于号后面的Please Input Folder Path : 起提示作用,不计入变量值,如键入 E:\TestFile

(3)for /r %folder_path% %%i in (*) do (执行的命令) 遍历指定路径下的所有文件,其中 %folder_path% 为上一步键入的指定路径

(4)echo %%i>>D:\AllFilePath.txt 将已遍历的文件绝对路径保存到 D:\AllFilePath.txt 文本中

(5)echo Ready To Open File %%i… 起注释作用,在命令行窗口输出待打开的文件路径,为下一步的start命令做准备

(6)start %%i 用默认方式打开文件

(7)pause 按任意键继续,避免一次性文件被全部打开

四、运行批处理脚本效果

批处理 打开java程序 批处理打开文件_命令行_02

五、在此基础上扩展:打开指定后缀的文件

需求:要求只打开txt后缀和.jpg后缀的文件,只需在遍历文件中的通配符中指定文件名正则表达式即可
文件名正则表达式:*.txt 和 .jpg,其中代表任意文件名称,指定后缀

代码修改如下:

@echo off
title Open File Script
set /p folder_path=Please Input Folder Path : 
for /r %folder_path% %%i in (*.txt *.jpg) do (
	echo %%i>>D:\AllFilePath.txt
	echo Ready To Open File %%i...
	start %%i
	pause
)
echo Caution : All File Are Viewed And Ready To Exit
pause

运行结果:

批处理 打开java程序 批处理打开文件_文件名_03