2016-09-28 38 views
2

我想如果startfolder的子文件夹或子文件夹包含以下视频文件类型执行命令的MP4 .MOV .WMV .AVI运行一个命令,子文件夹包含在批处理文件的视频文件

即可以将多个如果存在通配符,则使用通配符?

@echo off 
SETLOCAL enableDelayedExpansion 
color 0B 

SET STARTFOLDER=C:\Users\%Username%\LocalData\Video Files 

for /d %%d in ("%STARTFOLDER%\*") do (
for %%f in ("%%d") do (
If exist "%%f\*.mp4 *.mov *.wmv *.avi" (
    Echo subfolder or subfolder of subfolder contains a video file 
    Echo ***This bit not working*** 
) 
) 
+0

如果它们是子文件夹中的文件,真的需要知道你计划做什么。如果我们不知道整个图像,这可能会改变代码。 – Squashman

+1

你不能在'if exists'处声明多个文件模式;因此,为每个模式添加一个“if exists”行并进行条件性的“调用”;并删除内部的'%% f'循环是完全无用的:'如果存在'%%〜d \ *。mp4“call:SUBROUTINE' for each file pattern ... – aschipfl

回答

1

假设您只想检查子文件夹,而不是子子文件夹,下面是一个简单的方法。

@echo off & setlocal enabledelayedexpansion 

SET STARTFOLDER=C:\Users\%Username%\LocalData\Video Files 

for /d %%d in ("%STARTFOLDER%\*") do (
    pushd "%%~d" 
    dir /b *.mp4 *.mov *.wmv *.avi 1>nul 2>nul 
    if !errorlevel!==0 echo "%%~d" 
    popd 
) 
0

也许这是你以后?

@Echo Off 
SetLocal EnableDelayedExpansion 
Color 0B 
Set "StartFolder=%UserProfile%\LocalData\Video Files" 
Set i=0 
For /R "%StartFolder%" %%A In (*.mp4 *.mov *.wmv *.avi) Do (
    2>Nul Set InFld[|Find "]=%%~dpA">Nul 2>&1||(Set/A i+=1 
     Set "InFld[!i!]=%%~dpA")) 
If %i% Equ 0 (Echo No video files within the tree: %StartFolder% 
    GoTo :EndIt) 
Echo= The following folders within %StartFolder% contain a video file: 
For /L %%I In (1,1,%i%) Do Echo= !InFld[%%I]:%StartFolder%=! 
:EndIt 
Echo= 
Pause 
Exit/B 
+0

这很棒,但如果CCTV文件(s)在子文件夹2或3级中找到,我如何才能在最后一个循环中将顶层子文件夹作为变量返回? – Marsi63