2016-09-28 2 views
2

enthält würde Ich mag ein einen Befehl ausführen, wenn ein Unterordner oder Unterordner des startfolder die folgenden Videodateitypen enthält .mp4 .mov .wmv .aviAusführen eines Befehls, wenn Unterordner Video-Dateien im Batch-Datei

also können mehrere Wildcards verwendet werden, wenn vorhanden?

@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

Würde wirklich wissen müssen, was Sie vorhaben zu tun, wenn ihre Dateien im Unterordner sind. Dies könnte den Code ein bisschen ändern, wenn wir nicht das ganze Bild kennen. – Squashman

+1

Sie können nicht mehrere Dateimuster bei 'if exist' angeben; Fügen Sie daher für jedes Muster eine 'falls vorhanden'-Zeile hinzu und führen Sie einen bedingten 'Aufruf' durch; und entfernen Sie die innere 'für %% f'-Schleife, die völlig nutzlos ist:' Wenn vorhanden "%% ~ d \ *. mp4" Aufruf: SUBROUTINE' für jedes Dateimuster ... – aschipfl

Antwort

1

Angenommen, Sie wollen nur die Unterordner überprüft und nicht die Unter Unterordner, hier ist eine einfache Möglichkeit, es zu tun.

@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

Vielleicht ist es das, wonach Sie suchen?

@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

Das ist toll fast da, aber wenn die CCTV-Datei (s) sind in einem Unterordner 2 oder 3 Ebenen tief, wie kann ich nur den obersten Unterordner als Variable in der letzten Schleife zurückgegeben? – Marsi63

Verwandte Themen