Dateien per Batch umbenennen, kopieren, mit einer Aktion versehen und durchnummeriert ins LOG schreiben
Ich habe folgendes Ziel:
1. Dateien aus einem Verzeichnis in den Temp-Ordner kopieren
2. Dateien umbenennen / fortlaufend numerieren (3stellig)
3. Datein nacheinander aus dem Temp Ordner mit einer Aktion versehen
Hierzu habe mich auch schon durch die Datenbank hier gwühlt und auch schon ein paar Beiträge /Ideen zu meinem Thema gefunden.
Aus einem der Beiträge habe ich das folgende:
Mit diesem Code werden alle Dateien mit dem aktuellen Datum und den letzten Stellen mit dem ursprünglischen Dateinamen umbenannt. Als Anfang schonmal nicht schlecht. Das Kopieren mit gleichzeitigem Umbenennen könnte man so realisieren.
Im Laufe meines Skriptes werden verschiedene Varianblen mit den entsprechenden Informationen gefüllt.
Und am Ende werden die Dateien kopiert, z.B. mit dem Code oben, und dann wird mit einer FOR Schleife jede Datei mit einer Aktion versehen.
In meiner FOR Schleife wird für jede Aktion auch das Ergebnis in eine LOG Datei geschrieben.
Und genau in diese LOG Datei will ich for die Dateien mit denen was passiert ist eine fortlaufende Nummer schreiben.
Aktuell sind die LOG Datei so aus:
Nun habe ich versucht meine FOR Schleife anzupassen, dass in meiner Report Datei die Dateien auch numeriert werden.
Aber mit dem klappt es leider nicht mit der Nummerierung der ins LOG geschriebenen Dateien. Es steht immer eine 0 davor. Nicht 1, 2, 3 usw.
Ich hoffe hier kann mir einer helfen.
Vielen Dank schon im Vorraus.
W2K-Networker
1. Dateien aus einem Verzeichnis in den Temp-Ordner kopieren
2. Dateien umbenennen / fortlaufend numerieren (3stellig)
3. Datein nacheinander aus dem Temp Ordner mit einer Aktion versehen
Hierzu habe mich auch schon durch die Datenbank hier gwühlt und auch schon ein paar Beiträge /Ideen zu meinem Thema gefunden.
Aus einem der Beiträge habe ich das folgende:
set d=%date%
set ds=%d:~6,4%%d:~3,2%%d:~0,2%
for %%i in ("%var0%\*.jpg") do copy "%%i" "%temp%\%ds%%%~nxi"
for %%i in ("%var0%\*.gif") do copy "%%i" "%temp%\%ds%%%~nxi"
for %%i in ("%var0%\*.bmp") do copy "%%i" "%temp%\%ds%%%~nxi"
Mit diesem Code werden alle Dateien mit dem aktuellen Datum und den letzten Stellen mit dem ursprünglischen Dateinamen umbenannt. Als Anfang schonmal nicht schlecht. Das Kopieren mit gleichzeitigem Umbenennen könnte man so realisieren.
Im Laufe meines Skriptes werden verschiedene Varianblen mit den entsprechenden Informationen gefüllt.
Und am Ende werden die Dateien kopiert, z.B. mit dem Code oben, und dann wird mit einer FOR Schleife jede Datei mit einer Aktion versehen.
In meiner FOR Schleife wird für jede Aktion auch das Ergebnis in eine LOG Datei geschrieben.
Und genau in diese LOG Datei will ich for die Dateien mit denen was passiert ist eine fortlaufende Nummer schreiben.
Aktuell sind die LOG Datei so aus:
--[ START ]--[ 8:36:51,12 ]--
10.gif
11.gif
20.jpg
21.jpg
31.bmp
32.bmp
--[ END ]--[ 8:36:51,93 ]--
Nun habe ich versucht meine FOR Schleife anzupassen, dass in meiner Report Datei die Dateien auch numeriert werden.
for /f %%a in ('dir %temp%\*.* /A-D /B') do (
for %%a in ('dir %temp%\*.* /A-D /B') do echo -f %choice1% -t %choice2% -s %choice3% -a "%%a"&&echo %%a >>%temp%\report.txt
echo %%a >>%temp%\LOG.txt
set /a count=count+1
)
Aber mit dem
set /a count=count+1
Ich hoffe hier kann mir einer helfen.
Vielen Dank schon im Vorraus.
W2K-Networker
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 173064
Url: https://administrator.de/contentid/173064
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
5 Kommentare
Neuester Kommentar
Hey,
vermutlich mußt Du mit dem Befehl "Setlocal EnableDelayedExpansion " arbeiten.
Ansonsten werden alle Variablen zu Beginn der Ausführung "expandiert" und danach läßt sich während der Ausführung Deiner Batch nichts mehr dran ändern.
Mit diesem Befehl kannst Du die Variable count mit dem von Dir beschriebenen Befehl set /a count=count+1 hochzählen und mit !count! (Ausrufezeichen statt Prozent) wiedergeben. In der von Dir kopierten Schleife sehe ich jedoch überhaupt nichts vom Gebrauch der Variable.
Vielleicht hilft das ja weiter.
Schöne Grüße
Dave
vermutlich mußt Du mit dem Befehl "Setlocal EnableDelayedExpansion " arbeiten.
Ansonsten werden alle Variablen zu Beginn der Ausführung "expandiert" und danach läßt sich während der Ausführung Deiner Batch nichts mehr dran ändern.
Mit diesem Befehl kannst Du die Variable count mit dem von Dir beschriebenen Befehl set /a count=count+1 hochzählen und mit !count! (Ausrufezeichen statt Prozent) wiedergeben. In der von Dir kopierten Schleife sehe ich jedoch überhaupt nichts vom Gebrauch der Variable.
Vielleicht hilft das ja weiter.
Schöne Grüße
Dave
Hallo W2K-Networker und willkomen im Forum, hallo dave84620!
Abgesehen von dem (entscheidenden) Hinweis auf die "delayedExpansion" noch einige Anmerkungen:
Soferne die Dateinamen auch Leerzeichen enthalten (können), sollte die Schleife besser
lauten.
Anstelle von
genügt (auch mit "delayedExpanison")
Wenn tatsächlich eine 3-stellige Nummer gefragt sein sollte, würde ich vorweg
und danach dann
empfehlen.
Eine Alternative zum eigenen Zähler wäre die Verwendung von "
wodurch dann in der Schleife in "%%a" die laufende Nummer und in "%%b" der Dateiname stünde ...
Grüße
bastla
Abgesehen von dem (entscheidenden) Hinweis auf die "delayedExpansion" noch einige Anmerkungen:
Soferne die Dateinamen auch Leerzeichen enthalten (können), sollte die Schleife besser
for /f "delims=" %%a in ('dir %temp%\*.* /A-D /B') do
Anstelle von
set /a count=count+1
set /a count+=1
set /a count=1001
echo !count:~-3!
Eine Alternative zum eigenen Zähler wäre die Verwendung von "
findstr
" (dann wieder ohne führende Nullen):for /f "tokens=1* delims=:" %%a in ('dir %temp%\*.* /A-D /B^|findstr /n "^"') do
Grüße
bastla
Hallo W2K-Networker!
Falls Du dennoch Interesse an der Alternative hast, kannst Du ja einfach folgende Zeile direkt in der CMD-Shell eingeben:
"
Grüße
bastla
Falls Du dennoch Interesse an der Alternative hast, kannst Du ja einfach folgende Zeile direkt in der CMD-Shell eingeben:
dir %temp%\*.* /A-D /B|findstr /n "^"
findstr
" hat hier nicht wirklich die Aufgabe, Zeilen zu suchen (daher als Suchbegriff "^" = jede Zeile, die einen Zeilenanfang hat = alle Zeilen), sondern liefert nur über den Schalter "/n" die Nummerierung - da diese durch einen ":" von der eigentlichen Zeile getrennt wird, sorgt die oben dargestellte "for
"-Schleife für das Aufteilen anhand dieses ":"; "Token 1" (also %%a) enthält dadurch die Nummer, "Token 2" (%%b) den Rest der von "findstr
" ausgegebenen Zeile (= wieder die usrprünglich von "dir
" gelieferte Ausgabe) ...Grüße
bastla