power-poler
Goto Top

Mit Batch zählen

Hallo
Ich nochmal mit einem Kleinen Problem in Sachen Anzahl Dateien zählen
Wolte jetzt mal eine Batch schreiben, die anhand des änderungsdatum von Bildern, Ordner erstell, und diese dan Je nach Datum einsortiert.
(Also sicherlich nichts dramatisches für euch, aber ich wolte mich jetzt einfach mal dran versuchen)
Aber das nur vorne weg, soweit bin ich noch nicht, und da suche ich natürlich weiter wenn es soweit ist.

So mein jetziges Problem sieht wie folgt aus:
Ich will Die Anzahl der Dateien in einem Ordner X herausfinden.
Bevorzugt der Ordner, in dem die Batch Datei liegt, alles andere wäre zu umständlich mit Pfad Eingabe und so.

Hier mein Ansatz:

@echo off & setlocal
Set "Pfad=%~dp0"  

::set "Pfad=C:\LOL" 
echo %Pfad%
pause
for /f %%i in ('dir "%Pfad%" ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i  
echo Gefunden: %Anz% Dateien

pause

Mein Problem ist jetzt, wenn ich den Pfad auf "LOL" umleite geht es, wenn ich aber den Source Pfad nehme zeigt es mir keine Datei Anzahl mehr an.
Folgende Zeile habe ich im Internet gefunden:
for /f %%i in ('dir "%Pfad%" ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i
echo Gefunden: %Anz% Dateien
Würde mich mal interessieren, was da geschieht.
Falls jemand eine Anleitung kennt, die sich auf das Problem bezieht, immer her damit.
Habe eben mal auf Anleitungen geklickt, und hab mich in keinster weise zurecht gefunden, weil da irgendwie alles drin ist.

Eins noch:
Wird die Batch Datei mitgezählt, oder nicht? weil wenn diese mitgezählt wird ist es schlecht.
Aber ich denke das lässt sich mit "-1" sicher lösen, da der Dateityp beliebig bleiben soll.
Was bringt eigentlich in der ersten Zeile das setlocal? echo off ist mir schon klar, aber mit dem anderen kann ich nichts anfangen.

Mfg
Und danke im Voraus
Power-Poler

Content-Key: 159009

Url: https://administrator.de/contentid/159009

Printed on: April 23, 2024 at 14:04 o'clock

Member: micneu
micneu Jan 19, 2011 at 17:50:15 (UTC)
Goto Top
würde dir auch ein powershell script helfen?

noch ein paar fragen, sind es nur .jpg oder auch .tif oder .png?
die soll die strucktur werden?
jahr -> monat -> tag -> bild?
wie soll es sein?
sowas könnte ich dir schnell liefern
Member: Power-Poler
Power-Poler Jan 19, 2011 at 17:57:55 (UTC)
Goto Top
Danke für deine Hilfe
Würde es gerne aber selbst mal versuchen.
Und wie gesagt, das ganze Sortieren soll später stattfinden.
Ich will jetzt erst mal mit der Zählung der Dateien beginnen und wie gesagt, soll der Datei Typ eigentlich irrelevant bleiben. Es soll einfach sortiert werden.
warum wäre es wichtig ob es jpg oder tif sind?
Member: micneu
micneu Jan 19, 2011 at 18:36:01 (UTC)
Goto Top
ob du mit exif daten arbeiten kannst / willst.

hier damit kannst du die anzahl der dateien anzeigen im aktuellen verzeichniss
$test = Get-ChildItem
$test.Count
Mitglied: 60730
60730 Jan 19, 2011 at 18:49:06 (UTC)
Goto Top
Servus
Zitat von @Power-Poler:

Mein Problem ist jetzt, wenn ich den Pfad auf "LOL" umleite geht es, wenn ich aber den Source Pfad nehme zeigt es mir keine Datei Anzahl mehr an.
  • bätche sind dümmer als Brot die wissen nicht, wann Sie hart werden dürfen - daher muß man bei jedem Programm aufs grammMü genau sein.

Würde mich mal interessieren, was da geschieht.

  • Jeder einzelne der Befehle kennt den Parameter /? - schau es dir einfach mal an.
Wird die Batch Datei mitgezählt, oder nicht? weil wenn diese mitgezählt wird ist es schlecht.
  • Gegenfrage - ist die Batch in dem durchsuchten Pfad? face-wink

Aber ich denke das lässt sich mit "-1" sicher lösen, da der Dateityp beliebig bleiben soll.
  • Si Senor
Was bringt eigentlich in der ersten Zeile das setlocal? echo off ist mir schon klar, aber mit dem anderen kann ich nichts anfangen.

  • Puh - harter Tobak face-wink mit dem glasklaren echo off..

such mal in meinen Anleitungen nach @echo off....und auch deine Frage gehört zu denen, die es so nicht geben würde, wenn du echo on geschaltet hättest.
  • Set "Pfad=%~dp0" mit einem Pause zeigt dir den Unterschied zu deinem selbstgesetzten lol - ist nur ein kleiner aber gemeiner schräger\/ogel face-wink

edit - wobei es in dem Fall Wurst ist, ob der "pfad" am ende ein \ hat oder nicht - außer es gäbe sowohl ordner als auch Datei(en) mit dem Namen.

Ich kann dir nur dir /? usw wärmstens empfehlen.
/edit

Gruß
Member: Biber
Biber Jan 19, 2011, updated at Oct 18, 2012 at 16:45:33 (UTC)
Goto Top
Moin Power-Puler,

ich finde es gut, dass du dich da durchbeissen und auch die einzelnen Befehle verstehen willst.

Zu dem zweiten, allgemeineren Teil deiner Fragen dazu:
Hier im Forum und auch im Bereich "Batchkrams" sind wir da quantitativ relativ gut aufgestellt - wenn du beispielsweise zu dem obigen Internet-Fundstück mal in unsere Forumssuchfunktion eingibst "FindStr Datei(en)", dann findest du 9 Fragen, 2 Anleitungen und 56 Kommentare dazu.

Und mit Abstand am Saubersten wird genau diese DIR-Ausgabe mit FOR /F-Anweisungen seziert in @Friemler 5-Sterne-Tutorial zu FOR-Schleife.
[ wenn du in dieser Anleitung das zweite Vorkommnis von "Datei(en)" gefunden hast, da hast du deinen Fall in 3 Bänden mit Goldprägung.]

Wenn du dieses Tutorial durchgehechelt hast, dann nimm danach diese Zeile vom CMD-Prompt:
>@for %i in (txt bat cmd pdf) do @for /f %j in ('dir d:\temp\*.%i^|findstr "Datei(en)"') do @echo Anzahl *.%i: %j
Anzahl *.txt: 81
Anzahl *.bat: 32
Anzahl *.cmd: 9
Anzahl *.pdf: 1
... und du verstehst sofort jede einzelne Zeile.

Grüße
Biber
Member: Power-Poler
Power-Poler Jan 19, 2011 at 19:05:49 (UTC)
Goto Top
Jetzt geht es:
Diese Zeile hat mir gefehlt:
Set Pfad=%Pfad:~0,-1%

Dachte ich hätte es soweit schon, habe aber den befehl immer falsch geschrieben:
Set Pfad=%Pfad%:~0,-1 <-- so hatte ich es versucht.
Member: Biber
Biber Jan 19, 2011 at 20:34:45 (UTC)
Goto Top
BTW, Power-Puler,

wenn du doch die Batch-Datei ohnehin in den Ordner, der durchgeflöht werden soll packen und dort starten willst,
dann kannst du auch solche abgedrehten akademischen Elaborate wie 'Set "Pfad=%~dp0" ' ganz weglassen
->es geht um das aktuelle Verzeichnis-> also um ein einfaches ' DIR .' oder 'DIR .\*.jpg'.
Wenn du aber kein 'SET pfad=...' mehr brauchst, dann brauchst du auch kein "SetLocal" und der ganze Batch passt schon auf viel kleinere Festplatten.

Grüße
Biber
Member: Power-Poler
Power-Poler Jan 20, 2011 at 15:48:03 (UTC)
Goto Top
An was für Festplatten denkst du?
Ich dachte an welche von 100GB bis 1000GB (Auf denen das Programm arbeiten soll, es soll die 100GB dan nicht anfangen zu sortieren)

Und bitte, nenn mich nicht Puler.
entweder Power-Poler, oder nur Power.
Danke face-smile

Und wie kann ich dan das DIR in eine Anzahl packen? das zeigt mir doch nur eine Liste der Dateien an.
Member: Biber
Biber Jan 20, 2011 at 17:26:50 (UTC)
Goto Top
Moin Power-Poler,

Zitat von @Power-Poler:
An was für Festplatten denkst du?
Ich dachte an welche von 100GB bis 1000GB (Auf denen das Programm arbeiten soll,
es soll die 100GB dan nicht anfangen zu sortieren)
Hast recht, da sollte die Batchdatei <i>eigentlich draufpassen, egal ob als Oneliner oder als 10-Zeiler.

Und bitte, nenn mich nicht Puler.
entweder Power-Poler, oder nur Power.
Danke face-smile
Tja, da bin ich wohl mit der Schreibweise Pooler beim Poler auf'n Poller gelaufen.

Und wie kann ich dan das DIR in eine Anzahl packen? das zeigt mir doch nur eine Liste der Dateien an.
Ägypten? Pellkartoffel? 42?
Du hattest doch diese Plauderei eröffnet mit den Worten
Folgende Zeile habe ich im Internet gefunden:
for /f %%i in ('dir "%Pfad%" ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i
echo Gefunden: %Anz% Dateien

Ich dachte, da ging es um das Rausfieseln einer Dateianzahl aus der DIR-Ausgabe?
Und auf ein Tutorial, in dem das Rausfieseln von allen kleinen Perlen aus etwas Hingeworfenem
allergeduldigst beschrieben wird, hatte ich doch auch schon verwiesen weiter oben?

???

Grüße
Biber
Member: Power-Poler
Power-Poler Jan 20, 2011 at 17:35:17 (UTC)
Goto Top
Ja, entschuldige, hab da etwas auf dem Schlauch gestanden.
Das tut die Zeile ja schon.
Bin immer noch am durcharbeiten des tuts, und habe zumindest mal raus gefunden, wie man mit Variablen Verzögerungen umgeht.
Bitte hab etwas Geduld mit mir.
Ich melde mich dan normal, wenn ich das tut durch habe.
Eins noch.
Wie kann ich das automatische schließen der patch verhindern, bei Syntaxfehler oder so.
Kann da immer noch kurz die Fehlermeldung lesen, also was ich falsch gemacht habe, aber es geht dan sofort wider zu.
Auch mein beliebtes "Pause" hilft mir da nicht weiter.
Member: Biber
Biber Jan 20, 2011 at 17:44:52 (UTC)
Goto Top
Moin Power-Poler,

CMD-Bätches, KiX-/VBS-/JSKleinskripte im Entwicklungsstadium werden immer getestet am CMD-Prompt/an der "Eingabeaufforderung".
Im Zweifelsfall nach "Eingabeaufforderung" in der Windows-Hilfe suchen.

Per Doppelklick von Desktop aus kannst du nichts testen.

Grüße
Biber
Member: Power-Poler
Power-Poler Jan 20, 2011 at 18:04:40 (UTC)
Goto Top
Danke, habs gefunden.
CMD öffnen, batch rein ziehen, Enter drücken, und Fehlermeldung bleibt stehen.
Hab nur nicht gedacht, das es für Windows einen unterschied macht, da ja bei Doppelklick auch CMD geöffnet wird.
Member: Power-Poler
Power-Poler Jan 22, 2011 at 10:12:07 (UTC)
Goto Top
So
Habe es endlich geschafft.
Natürlich will ich euch das Ergebnis nicht vorenthalten.
@echo off & setlocal enabledelayedexpansion 
Set "Pfad=%~dp0"  
for /f %%i in ('dir "%Pfad%" ^2^>nul^|find "Datei(en)"') do set /a anz+=%%i  
set Anz=%Anz%
echo Gefunden: %Anz% Datei(en)
echo Dateien nach Name sortieren "N"  
echo Dateien nach Datum sortieren "D"  
echo Falsche eingabe, erneute eingabe

:Neu
set /p "Hallo=Was soll geschen: "  

if "%Hallo%" equ "N" goto :LOL  
if "%Hallo%" equ "D" goto :Test2  
goto :Neu


:LOL
for %%i in ("%Pfad%*") do (  
set "lol=%%~xi"  
set "lol2=%%~ni"  
set "lol3=!lol2!!lol!"  
xcopy "%%i" "%Pfad%!lol2!\" /I  
)

goto :EOF

:Test2
for %%i in ("%Pfad%*") do (  
set Zeit=%%~ti
echo !Zeit!
set Zeit2=!Zeit:~0,10!
echo !Zeit2!
xcopy "%%i" "%Pfad%!Zeit2!\" /I  
)
goto :EOF

Hoffe habe alles richtig gemacht, und er tut auch das was er soll.
Zu der Zeile, die die Anzahl der Dateien Zählen soll, hätte ich noch eine frage, ob ich das richtig sehe:
Die Zeile Zählt ja nicht wirklich die Anzahl der Dateien, sondern nur die Wiederholungen der For schleife, also wie oft der dir Befehl Braucht, um alle Dateien zu finden, oder sehe ich das Falsch?