CMD Befehl auf Unterordner erweitern: for %%a in ("\\Pfad\bla\*.mp4") do set /a i+=1?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Warum so umständlich?

dir *.mp4 >counter.txt
find /N "Datei(en)" counter.txt

fertig.

LordWithLord 
Fragesteller
 04.10.2018, 23:39

Dasselbe wie hier nur mit extra .txt file:

dir "\\Krulju\i\Dokumente\Movies, Series, Musicvideos" | find "Datei(en)"

Das Problem hierbei ist, dass als Ausgabe keine reine Zahl raus kommt:

1 Datei(en),            420 Bytes

Außerdem besteht immer noch das Problem mit den Unterordnern die nicht erkannt werden.

0
LordWithLord 
Fragesteller
 04.10.2018, 23:55
@knutschzwiebel

Sorry, ich dachte du meintest meine vorgeschlagene Variante oben xd

So, ich nehme an das Ergebnis in der letzten Zeile ist die Summe der vorher aufgelisteten Dateien. Jetzt habe ich allerdings folgendes Problem:

Die Ausgabe sieht so aus:

3 Datei(en),        230.287 Bytes

Aber um eine reine Variable mit der ich rechnen kann zu erzeugen, muss alles nach der "3" weg. Auch eine Idee dafür?

0
knutschzwiebel  05.10.2018, 00:00
@LordWithLord

Selbstverständlich.

dir *.mp4 /s > counter.txt
find /c /i "mp4" counter.txt

oder eben

dir *.mp4 /s | find /c /i "mp4"

1
LordWithLord 
Fragesteller
 05.10.2018, 00:06
@knutschzwiebel

Die Ausgabe im Counter ist wegen den fehlenden

| find "Datei(en)"

sehr unübersichtlich und listet auch Pfade ohne .mp4 Dateien auf. Außerdem steht in der Ausgabe der CMD nun

FIND: Parameterformat falsch

Hast du noch eine andere Lösung? :)

0
knutschzwiebel  05.10.2018, 00:08
@LordWithLord

dir *.mp4 /s | find /c /i "mp4" gibt genau die Anzahl der mp4 Dateien in allen Unterverzeichnissen an und zwar nur die Zahl ohne jeglichen Text.

0
knutschzwiebel  05.10.2018, 00:12
@LordWithLord

Den anderen Kram brauchst du nicht. Wie schon gesagt, einfach nur

dir *.mp4 /s | find /c /i "mp4"

und sonst nichts.

0
LordWithLord 
Fragesteller
 05.10.2018, 00:15
@knutschzwiebel

Wenn ich aber

echo %mp4%

dazu füge, erhalte ich die Ausgabe

ECHO ist ausgeschaltet (OFF).

Ich brauche diese Variable ja noch zum rechnen.

0
knutschzwiebel  05.10.2018, 00:19
@LordWithLord

Was willst du mit echo %mp4%? Die genannte Befehlskette gibt das Ergebnis doch schon aus? Wozu nochmal ein echo?

0
LordWithLord 
Fragesteller
 05.10.2018, 00:23
@knutschzwiebel

Das echo war der Test ob die Variable existiert. Und sobald diese Variable existiert, kann ich mit ihr + rechnen. Heißt zum Beispiel:

100 MP4´s + 100 WMV´s = 100 Video Dateien

0
LordWithLord 
Fragesteller
 05.10.2018, 00:26
@knutschzwiebel

Hab´s gerade:

@echo off
dir "\\Krulju\i\Dokumente\Movies, Series, Musicvideos\*.mp4" /s | find /c /i "mp4" >"\\Krulju\i\Dokumente\Server\Dateien\counter.txt"
SET /p mp4=<"\\Krulju\i\Dokumente\Server\Dateien\counter.txt"
echo ---
echo %mp4%
pause>NUL
exit

0
LordWithLord 
Fragesteller
 05.10.2018, 00:31
@knutschzwiebel

VIEL einfacher als bei jemand anderen mit den ich vorher gechattet habe. Wenn es nach ihm ginge hätte ich jetzt ein PowerShell Skript, 2 oder 3 .txt´s und eine lange CMD xxD

0
Roderic  05.10.2018, 00:33
@knutschzwiebel

Respekt.

Kleiner Tipp:

statt

dir *.mp4 /s

nimm

dir *.mp4 /s/b

Dann zähle einfach die Zeilen der Ausgabe.

0
knutschzwiebel  05.10.2018, 00:36
@Roderic

Das macht das Vorhaben vom Umfang her nicht kleiner, ist aber natürlich eine Alternative.

0
Roderic  05.10.2018, 00:39
@knutschzwiebel

Mittlerweile bin ich bei

dir *.mp4 /s/b|find /c "\"

Das liefert sauber die Anzahl.

0
knutschzwiebel  05.10.2018, 00:51
@Roderic

Ob

dir *.mp4 /s | find /c /i "mp4"

oder

dir *.mp4 /s/b|find /c "\"

kommt aufs Gleiche raus, wie schon gesagt. Es ist einfach nur eine Alternative.

0
Roderic  05.10.2018, 01:02
@knutschzwiebel

Deine Variante würde ein Verzeichnis, das im Namen die Zeichenkette "mp4" enthält, mitzählen. Meine nicht.

Aber ich wollte nicht meckern. Ich find deine Lösung auch so gut.

0
LordWithLord 
Fragesteller
 05.10.2018, 15:44
@knutschzwiebel

Hast du vielleicht auch eine Idee wie man damit Ordner zählen kann? Das wäre meine Idee:

dir "\\Krulju\i\Dokumente\Movies, Series, Musicvideos\Serien\*(*)" | find /c /i "(" >"\\Krulju\i\Dokumente\Server\Dateien\serienordnercounter.txt"

Damit Serien besser von Kodi erkannt werden können schreibe ich das Jahr der Serie hinter den Namen:

Breaking Bad (2008)

Auf diese Art sind alle Ordner benannt, deshalb die Idee mit den "\*(*)". Das komische ist das die Ausgabe nicht richtig ist. Anzahl von Ordnern nachgezählt im Explorer: 5 . Anzahl von Ordnern in der Ausgabe der CMD: 7 . Die Attribute /s habe ich extra entfernt dass er keine Unterverzeichnisse durchsucht. Eine Idee wo der Fehler liegt? :)

0

Mit for/D kannst du statt Dateien Verzeichnisse durchlaufen:

set "p=\Krulju\i\Dokumente\Movies, Series, Musicvideos\"

for /D %%D in ("%p%*") do call :ForFiles "%%~D\" mp4
call :ForFiles "%p%" mp4

cls&echo %i%&pause&exit

:ForFiles
    for %%F in ("%~1*.%~2") do set /a i+=1
exit /B

ist doch etwas länger geworden, da ich die ForFiles-Schleife ausgelagert hab, so kannst du sie auch für das übergeordnete Verzeichnis aufrufen.

~Tim

Hallo, Hir nochmal in einfach

@echo off
color a
cd "%userprofile%\desktop"
echo.
echo        BITTE WARTEN...
dir /ON /B /S *.mp4 >"%Temp%\Mp4Suche.TEMP"
set /p a=<"%TEMP%\Mp4Suche.Temp"
cls
echo.
echo erstes Ergebnis: --^> "%a%"
ping /n 2 localhost>nul
echo                      ^|
echo weitere Ergebnise... \ /
ping /n 2 localhost>nul
echo.
type "%Temp%\mp4Suche.TEMP"
ping /n 2 localhost>nul
echo Fertig !
echo.
pause
echo.
echo Chach wird geloecht...
ping /n 2 localhost>nul
del /q "%TEMP%\Mp4Suche.TEMP" >nul
exit

das ist der such befel

 dir /ON /B /S *.mp4 >"%Temp%\Mp4Suche.TEMP"

/on = nach namen sotiren

/b = ganzen müll weg lassen

/s = auch in unterordner suchen

hilfe findest du wen du

DIR /?

eingipst

ich hoffe ich konnte dir helfen...!

Woher ich das weiß:eigene Erfahrung
@echo off
setlocal disableDelayedExpansion
if "%~1"=="" (call :recurse ".") else call :recurse %1
exit /b

:recurse
setlocal
set i=0
for /d %%D in ("%~1\*") do call :recurse "%%~fD"
for /f %%A in ('dir /b /a-d "%~1\*.mp4" 2^>nul ^| find /v /c ""') do set /a i+=%%A
echo "%~f1" %i%
(
     endlocal
     set /a i+=%i%
)
echo %i%
exit /b

Sowas?