如何编写dos批处理枚举指定目录下以及其下所有子目录的文件?
我想用一个命令行软件(一个转换音频格式的软件)转换指定目录以及其下子目录下所有的指定类型(wav)文件写一个dos批处理,对其输入目录下进行枚举,包括其下的所有子目录下,...
我想用一个命令行软件(一个转换音频格式的软件)转换指定目录以及其下子目录下所有的指定类型(wav)文件
写一个dos批处理,对其输入目录下进行枚举,包括其下的所有子目录下,只要有指定类型的文件就调用命令行软件进行处理,然后再枚举~
该如何编写这个批处理?
可不可以直接用拖入的方式?比如我有三个目录,能不能我用鼠标选中这三个目录,然后将其拖到批处理文件上,批处理文件就会对这三个目录下以及三个目录下的所有子目录进行枚举~
当然这里不仅限三个目录,也可以是目录和文件混合拖入,只要符合条件的就处理~
高手指点如何编写这个批处理? 展开
写一个dos批处理,对其输入目录下进行枚举,包括其下的所有子目录下,只要有指定类型的文件就调用命令行软件进行处理,然后再枚举~
该如何编写这个批处理?
可不可以直接用拖入的方式?比如我有三个目录,能不能我用鼠标选中这三个目录,然后将其拖到批处理文件上,批处理文件就会对这三个目录下以及三个目录下的所有子目录进行枚举~
当然这里不仅限三个目录,也可以是目录和文件混合拖入,只要符合条件的就处理~
高手指点如何编写这个批处理? 展开
展开全部
@echo off
if "%1"=="" goto SearchFile
:: 判断是否有输入参数,如果没有默认枚举工作目录
:CheckArg
:: 检查当前参数段
if "%1"=="" goto End
:: 如果当前参数为空则退出批处理
cd %1>nul 2>nul && cd.. && goto SearchFile
:: 检查当前参数是目录还是文件,是目录则跳到SearchFile段
dir %1>nul 2>nul || goto error
:: 检查当前参数是否为有效文件,否则跳到Error段
set file=%1
:: 设置file变量为当前参数
call :Command
:: 跳转Command段
:NextPar
:: 下个参数段
shift /1
:: 下个参数移至当前参数
goto CheckArg
:: 跳转CheckArg段
:SearchFile
:: 枚举目录段
for /R %1 %%i in (*.wav) do set file=%%i && call :Command
:: 枚举目录中指定类型的文件
goto NextPar
:: 跳转NextPar段
:Command
:: 命令段
echo 当前被处理文件为%file%
:: 命令放在这里
exit /b
:: 返回调用前的指令
:Error
:: 参数错误段
echo %1 is not a valid argument!
:: 输出参数错误提示
pause
:: 暂停程序
goto NextPar
:: 继续下个参数
:End
echo All Files Down . . .
pause
if "%1"=="" goto SearchFile
:: 判断是否有输入参数,如果没有默认枚举工作目录
:CheckArg
:: 检查当前参数段
if "%1"=="" goto End
:: 如果当前参数为空则退出批处理
cd %1>nul 2>nul && cd.. && goto SearchFile
:: 检查当前参数是目录还是文件,是目录则跳到SearchFile段
dir %1>nul 2>nul || goto error
:: 检查当前参数是否为有效文件,否则跳到Error段
set file=%1
:: 设置file变量为当前参数
call :Command
:: 跳转Command段
:NextPar
:: 下个参数段
shift /1
:: 下个参数移至当前参数
goto CheckArg
:: 跳转CheckArg段
:SearchFile
:: 枚举目录段
for /R %1 %%i in (*.wav) do set file=%%i && call :Command
:: 枚举目录中指定类型的文件
goto NextPar
:: 跳转NextPar段
:Command
:: 命令段
echo 当前被处理文件为%file%
:: 命令放在这里
exit /b
:: 返回调用前的指令
:Error
:: 参数错误段
echo %1 is not a valid argument!
:: 输出参数错误提示
pause
:: 暂停程序
goto NextPar
:: 继续下个参数
:End
echo All Files Down . . .
pause
展开全部
这个不难,枚举的话可以用FOR命令,比如要将你包含WAV的文件夹放在D盘的WAV目录下,然后运行如下命令
for /r d:\wav %%a in (*.wav) do echo %%a
上面要改的地方只有一个,就是do后面的命令,比如echo %%a则是显示所枚举的WAV文件
至于d:\wav这个路径的话你也可以改,有不懂的还可以问我,还有一点,把命令保存成BAT文件再运行,后面所执行的命令最好和前面的在一行里一起
for /r d:\wav %%a in (*.wav) do echo %%a
上面要改的地方只有一个,就是do后面的命令,比如echo %%a则是显示所枚举的WAV文件
至于d:\wav这个路径的话你也可以改,有不懂的还可以问我,还有一点,把命令保存成BAT文件再运行,后面所执行的命令最好和前面的在一行里一起
追问
如何做到直接把要处理的目录拖到这个bat文件上,它就会自动对拖入的目录和文件进行处理?
比如我可以选中三个目录拖到bat文件上,或者选中两个目录再加几个文件一起拖到bat文件上~
追答
选中一个倒是容易,选中3个有点麻烦
for /r %1 %%a in (*.wav) do echo %%a
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-12-24
展开全部
枚举参数的问题也是你问的吧。可以调用多个子程序判断,处理
@echo off
:re
if not "%~1"=="" (call :sub "%~1") else (echo 完毕&pause>nul&exit)shift
goto :re
:sub
set ext=%~x1
if /i "%ext%"=="wav" (call :sub1 "%~1") else (call :sub2 "%~1")
goto :eof
:sub1
处理你的wav文件
goto :eof
:sub2
处理目录文件
因为子程序不可以互相效用,所以在这里用sub3与sub1相同的子程序来处理目录文件。
goto :eof
:sub3
处理你的wav文件
goto :eof
@echo off
:re
if not "%~1"=="" (call :sub "%~1") else (echo 完毕&pause>nul&exit)shift
goto :re
:sub
set ext=%~x1
if /i "%ext%"=="wav" (call :sub1 "%~1") else (call :sub2 "%~1")
goto :eof
:sub1
处理你的wav文件
goto :eof
:sub2
处理目录文件
因为子程序不可以互相效用,所以在这里用sub3与sub1相同的子程序来处理目录文件。
goto :eof
:sub3
处理你的wav文件
goto :eof
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询