nullpeiler
Goto Top

Batch ordner durchsuchen und letzte Datei finden

Hallo Admins,

ich möchte folgendes durchführen.
1. Einen Ordner nach jpg dateien mit laufender Nummer durchsuchen und die letzte nummer finden.
2. automatisch Dateien anhand der lfdnr. einfügen.

Also letzte jpg zb.999 finden
neue bilder aus einem anderen Ordner z.B. Temp mit 1000.1001,1002 usw einfügen
Wäre dankbar für Tipps...
MfG der Nullpeiler

Content-ID: 287044

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

TlBERlUS
TlBERlUS 29.10.2015 um 15:16:56 Uhr
Goto Top
Hi,

powershell:
zum Finden:
$arr = gci .\Desktop\test
$arr[-1] -replace ".jpg",""  


Jetzt bin ich mir allerdings nicht sicher was du mit 2. meinst. Du musst sie doch einfach nur reinkopieren?
nullpeiler
nullpeiler 29.10.2015 um 15:43:55 Uhr
Goto Top
Hallo Tiberius,

ich meinte mit 2. das sag ich mal in dem ordner bilder bis lfdnr 78 drin sind und ich nun die neuen dateien 79,80,usw einkopiert.
122990
122990 29.10.2015 aktualisiert um 16:04:40 Uhr
Goto Top
Moin
Zitat von @nullpeiler:
ich meinte mit 2. das sag ich mal in dem ordner bilder bis lfdnr 78 drin sind und ich nun die neuen dateien 79,80,usw einkopiert.
das ist mindestens genauso unverständlich wie im ersten Post.

Hast du nun schon die neuen Dateien mit diesen Nummern(79,80), oder haben die neuen Dateien andere Nummern und du willst sie nur entsprechend umbenennen und in den Zielordner kopieren?

Etwas mehr Mühe beim Beschreiben geben, dann bekommst du auch zielgerichtete Antworten, und wie müssen nicht dauernd die Glaskugeln polieren. Danke.

Gruß grexit
nullpeiler
nullpeiler 29.10.2015 aktualisiert um 16:09:40 Uhr
Goto Top
Ok also versuch 3.
- ich möchte in einem Ordner nachschauen was ist die letzte .jpg z.B. 78.jpg
- dann aus einem anderen Ordner dateien automatisch umbennen und als 79.jpg 80.jpg usw einfügen.
Hoffe mich jetzt besser ausgedrückt zu haben.
122990
Lösung 122990 29.10.2015 aktualisiert um 17:20:11 Uhr
Goto Top
dateien automatisch umbennen
Das hat an Info gefehlt ....

PS
$quelle = 'C:\quelle'  
$ziel = "C:\ziel"  
[int]$last = [regex]::match((gci $ziel | sort {[int][regex]::match($_.Basename,'\d+$').Value} | select -Last 1 -Expand Basename),'\d+').Value  
gci $quelle -Filter *.jpg | %{$last++;copy-item $_.FullName -Destination "$ziel\$last$($_.Extension)"}  
Gruß grexit
nullpeiler
nullpeiler 29.10.2015 um 16:27:39 Uhr
Goto Top
Das sieht nach Powershell aus oder sehe ich das falsch?
122990
122990 29.10.2015 um 17:14:52 Uhr
Goto Top
Das sieht nach Powershell aus oder sehe ich das falsch?
Richtig, steht ja drüber...
MichaelW84
MichaelW84 30.10.2015 aktualisiert um 09:20:31 Uhr
Goto Top
Hi, du kannst es auch in batch lösen erst machst du ein dir auf den Ordner mit den Files und den laufenden Nr.
Schreibst dies weg in eine tut. Setzt dann für den letzten Eintrag eine variable.
dir /b /a-d *.jpg>text.txt
For /F %%i in ("Pfad.Txt") do set lastfile=%%i  


Danach kannst du die variable benutzen um die anderen Files umzubenennen in dem du

set /A lastfile=%lastfile:~—5,3%+1


Hoffe dass jetzt keinen Fehler gemacht habe es sollte dann nur die Zahl ausgegeben werden

Das ganze in eine for each schleife basteln mit dem Befehl Ren um die Dateien umzubenennen.

Also sollte möglich sein wenn es batchfile sein soll.
bastla
bastla 30.10.2015 aktualisiert um 14:54:55 Uhr
Goto Top
Hallo MichaelW84 und willkommen im Forum!

Wenn Du schon (unnötiger Weise) eine temporäre Textdatei erzeugst, solltest Du diese dann auch verwenden ("text.txt" - "Pfad.Txt") ... face-wink

Abgesehen davon ist das Thema ev nicht ganz trivial - je nachdem, was sich im entsprechenden Ordner so alles abspielt, ist es keineswegs sicher, dass die zuletzt aufgelistete Datei auch jene mit der höchsten Nummer ist. Eine Sortierung per /on würde daran scheitern, dass anscheinend keine fixe Stellenanzahl für die Nummer verwendet wird ("8.jpg" würde zB nach "79.jpg" einsortiert werden). Es könnte zur Not noch das Erstellungsdatum (und eher nicht das Änderungsdatum) der Datei herangezogen werden (/od /tc) - die Richtigkeit dieser Vorgangsweise müsste allerdings nullpeiler erst bestätigen ...

Sicher wäre letztlich nur eine Variante, die die einzelnen Nummern als Zahlen vergleicht, also etwas in der Art
@echo off & setlocal enabledelayedexpansion
set /a Max=-1
for %%i in (*.jpg) do if %%~ni gtr !Max! set /a Max=%%~ni
echo Bisher hoechste Nummer: %Max%
Einfacher wäre es natürlich, wenn die Nummer alle zB 5-stellig (also ab "00001") wären - dann ließe sich die höchste Nummer tatsächlich per
for /f %%i in ('dir /b /a-d /on *.jpg') do set /a Max=%%~ni
ermitteln ...

Für das Übernehmen der neuen Bilder wäre wiederum (von nullpeiler) zu (er-)klären, ob dabei eine bestimmte Reihenfolge gelten soll, und ob sich diese einfach per Sortierung nach dem Namen herstellen ließe ...

Grüße
bastla
MichaelW84
MichaelW84 31.10.2015 aktualisiert um 15:15:18 Uhr
Goto Top
Ich gebe dir an der Stelle recht dass man auf die temporäre Datei verzichten kann und das dir gleich in die for schleife schreiben kann. Eine durchnummerierung mit 0001 - 9999 erscheint mir sinnvoll.

Die Textdatei wird bei meiner Variante ja schon verwendet aber man kann sie sich auch sparen stimmt.

Frage: MAX=%%~ni steht für was?

Gruß micha
bastla
bastla 01.11.2015 aktualisiert um 02:13:07 Uhr
Goto Top
Hallo MichaelW84!
Frage: MAX=%%~ni steht für was?
Antwort:
  • Mit echo on in einer vorher geöffneten CMD-Shell testen,
  • die Ausgabe von
for /?
bis (fast) zum Ende oder gleich
  • Friemlers einschlägiges hier) lesen ...

Grüße
bastla

P.S.:
Die Textdatei wird bei meiner Variante ja schon verwendet
Und da bist Du Dir ganz sicher (weil Du die gepostete Version auch getestet hast)?

Abgesehen von den unterschiedlichen Dateinamen: Anführungszeichen um Pfade / Dateinamen herum sind fast immer eine gute Idee ... face-wink
nullpeiler
nullpeiler 02.11.2015 um 09:52:29 Uhr
Goto Top
Hallo Ihr, danke für die Hilfe ich werde es mal prüfen ob das so funktioniert.