For-Schleife dreht eine runde zuviel
Moin,
ich habe eine Script in dem auf einem IN Ordner die vorhandene XML in den OUT Ordner geschoben wird. Diese wird dann mit einer Schleife mit einem Timestring im Namen versehen und danach in den Backup Ordner kopiert.
Es liegt immer nur eine Datei im IN Ordner und eine Datei im OUT Ordner
Name im IN Ordner: 2012_09_04.xml
Name im OUT Ordner mit Timestring: 2012_09_04_11_40.xml
Die Schleife die den Timestring anhängt dreht manchmal 2 Runden, anstatt nur einer und ließt die schon umbenannte Datei erneut ein und versieht sie mit dem selben Timestring
Name im OUT Ordner mit Timestring und erneutem lauf der Schleife: 2012_09_04_11_40_11_40.xml
Das Script:
Meine Frage ist nun: Wieso dreht die Schleife aus Zeile 30 manchmal 2 Runden und benennt die eben umbenannte Datei gleich erneut um?
Das Phänomen trifft mal auf und mal nicht, also nach keinem Muster.
Danke im Voraus.
Gruß Zero
ich habe eine Script in dem auf einem IN Ordner die vorhandene XML in den OUT Ordner geschoben wird. Diese wird dann mit einer Schleife mit einem Timestring im Namen versehen und danach in den Backup Ordner kopiert.
Es liegt immer nur eine Datei im IN Ordner und eine Datei im OUT Ordner
Name im IN Ordner: 2012_09_04.xml
Name im OUT Ordner mit Timestring: 2012_09_04_11_40.xml
Die Schleife die den Timestring anhängt dreht manchmal 2 Runden, anstatt nur einer und ließt die schon umbenannte Datei erneut ein und versieht sie mit dem selben Timestring
Name im OUT Ordner mit Timestring und erneutem lauf der Schleife: 2012_09_04_11_40_11_40.xml
Das Script:
@echo off
rem called by "at" jobs
rem Verschiebt XMLs von scdia_dada-Ordner nach Out-Ordner, kopie in Backup-Ordner und versieht den Namen mit einem Timestamp
rem deklarierung
rem Ordner wird vom Timejob übergeben und mit %1 abgefangen
set scdia_in_directory=%1
set scdia_backup_directory=c:\scdia_backup
set scdia_out_directory=c:\scdia_out
del /Q %scdia_out_directory%\*.7z
rem Wenn scdia_in_directory nicht leer ist, geh zum Programmpunkt Start
if "%scdia_in_directory%" neq "" goto start
:start
rem Wenn scdia_in_directory leer ist, geh zum Programmpunkt Ende
if "%scdia_in_directory%" equ "" goto end
rem Verschiebt alle XML-Dateien im IN-Directory ins OUT-Directory
move %scdia_in_directory%\*.xml %scdia_out_directory%\
setlocal enableextensions
rem Lässt sich die Zeit anzeigen und verpackt diese in Variable
FOR /f "tokens=1-3 delims=: " %%G IN ('time /t') DO set timestring=%%G_%%H%%I
for %%F IN (%scdia_out_directory%\*.xml) DO ren "%%F" "%%~nF_%timestring%.xml"
copy %scdia_out_directory%\*.xml %scdia_backup_directory%
rem Zippen der XML Datei mit anschließendem löschen
for %%F IN (%scdia_out_directory%\*.xml) DO "%ProgramFiles%\7-zip\7z.exe" a "%scdia_out_directory%\%%~nF.7z" "%%F" && del "%%F"
endlocal
:end
Meine Frage ist nun: Wieso dreht die Schleife aus Zeile 30 manchmal 2 Runden und benennt die eben umbenannte Datei gleich erneut um?
Das Phänomen trifft mal auf und mal nicht, also nach keinem Muster.
Danke im Voraus.
Gruß Zero
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 190674
Url: https://administrator.de/contentid/190674
Ausgedruckt am: 24.11.2024 um 02:11 Uhr
18 Kommentare
Neuester Kommentar
Moin,
Schau dir mal ein howto an, das sowas wie echo off als titel hat und befolge die tipps.
Und dann, was macht denn zeile 14ff?
Oder was denkst du, soll das machen?
In if not exist quelle\.xml ist wohl das was du willst und dachtest, dein if variable not leer waere das gleiche.
Isses aber garnicht.
Genauso zeile 20.
Und zeile 30, warum ist das kein for /r oder ein /f mit nem dir ????_??_??.xml ?
Denn damit wuerdest du nur die finden, die dem gewuenschten. Muster entsprechen.
Gruss
Edit @alex,
Doch doch das sind ein paar versteckte ganz offensichtlich drin, die erkennt mein interpreterr sogar bei 39grad fieber.
Schau dir mal ein howto an, das sowas wie echo off als titel hat und befolge die tipps.
Und dann, was macht denn zeile 14ff?
Oder was denkst du, soll das machen?
In if not exist quelle\.xml ist wohl das was du willst und dachtest, dein if variable not leer waere das gleiche.
Isses aber garnicht.
Genauso zeile 20.
Und zeile 30, warum ist das kein for /r oder ein /f mit nem dir ????_??_??.xml ?
Denn damit wuerdest du nur die finden, die dem gewuenschten. Muster entsprechen.
Gruss
Edit @alex,
Doch doch das sind ein paar versteckte ganz offensichtlich drin, die erkennt mein interpreterr sogar bei 39grad fieber.
Bedenke den Kommentar von TimoBeil, Zeile 15 & 20 sind wirklich unsinnig.
@timobeil, Asche auf mein Haupt, ich habe mir nur die Schleife angesehen, bin ich nicht so fit in Windows - Shell. Wenn dann BASH oder ich nehme gleich VB.NET
Aber du hast recht 15 & 20 ist mind. 1 Zeile überflüssig.
Deine XML frage habe ich auch nicht verstanden.
Gruß Alex
@timobeil, Asche auf mein Haupt, ich habe mir nur die Schleife angesehen, bin ich nicht so fit in Windows - Shell. Wenn dann BASH oder ich nehme gleich VB.NET
Aber du hast recht 15 & 20 ist mind. 1 Zeile überflüssig.
Deine XML frage habe ich auch nicht verstanden.
Gruß Alex
Zitat von @ColdZero89:
Moin Timo,
gut ich hab deine Fragen nun NULL verstanden, auch nicht was du mit mitteilen willst.
Als info: Es gibt IMMER nur XML Datein die folgendermaßen aussehen JAHR_MONAT_TAG und nach Umbenennung
Moin Timo,
gut ich hab deine Fragen nun NULL verstanden, auch nicht was du mit mitteilen willst.
Als info: Es gibt IMMER nur XML Datein die folgendermaßen aussehen JAHR_MONAT_TAG und nach Umbenennung
Gib doch mal dieses dir mit den fragezeichen so ein, woe es da oben steht, am besten im ordner womsowohl als auch xml dateien sind.
Wobei das allerletzte ? Tatsaexhlich ein satzzeichen ist und nix mit dem platzhalter fuer den dir befehl zu tun hat.....
Welche findet der und welche findet der nicht?
JAHR_MONAT_TAG_STUNDE_MINUTE kein anderes Format.
Und genau diese werden da oben garnixht gefunden, ergo auch nicht durch die whleife genudelt.Mea culpa, aber ipad, fieber ist alles etwas schwerer, denk mal nach, was ich dir durch die blume an tipps gebe, du sollstnja auch was davon haben.
Gruß Zero
der alte mann und seine Demo
ergo?
Wo taucht da die bereits unbemannte Datei auf?
Gruss
E:\demo>echo xyz>2012_09_04.xml
E:\demo>echo xyz>2012_09_04_11_40.xml
E:\demo>dir
Datenträger in Laufwerk E: ist Volume
Verzeichnis von E:\demo
04.09.2012 12:22 <DIR> .
04.09.2012 12:22 <DIR> ..
04.09.2012 12:22 5 2012_09_04.xml
04.09.2012 12:22 5 2012_09_04_11_40.xml
2 Datei(en) 10 Bytes
2 Verzeichnis(se), 5.203.779.584 Bytes frei
E:\demo>dir
Datenträger in Laufwerk E: ist Volume
Verzeichnis von E:\demo
04.09.2012 12:22 <DIR> .
04.09.2012 12:22 <DIR> ..
04.09.2012 12:22 5 2012_09_04.xml
04.09.2012 12:22 5 2012_09_04_11_40.xml
2 Datei(en) 10 Bytes
2 Verzeichnis(se), 5.203.779.584 Bytes frei
E:\demo>dir ????_??_??.xml
Datenträger in Laufwerk E: ist Volume
Verzeichnis von E:\demo
04.09.2012 12:22 5 2012_09_04.xml
1 Datei(en) 5 Bytes
0 Verzeichnis(se), 5.203.779.584 Bytes frei
E:\demo>
ergo?
E:\demo>for /f %a in ('dir /b ????_??_??.xml') do echo %a
E:\demo>echo 2012_09_04.xml
2012_09_04.xml
Wo taucht da die bereits unbemannte Datei auf?
Gruss
salve,
a) nein der alte mann hat sein schlepperltopf ausgepackt
b) auch nein - selbst wenn es einen Interpreter treffen wurde, der ein setlocal enableextensions brauchen würde...
Und dann - ohne ein If exist programpfad 7zip würde ich den rest auch nicht per && lösen wollen...
(warum - da kommt ihr selber drauf)
Gruß
a) nein der alte mann hat sein schlepperltopf ausgepackt
b) auch nein - selbst wenn es einen Interpreter treffen wurde, der ein setlocal enableextensions brauchen würde...
- Wie oft würde der dann in der Schleife Time /t auswerten?
Und dann - ohne ein If exist programpfad 7zip würde ich den rest auch nicht per && lösen wollen...
(warum - da kommt ihr selber drauf)
Gruß
Zitat von @ColdZero89:
Ich WEIß es ist da und das zu 100%, es gehört zur Standardsoftware dieses Gerätes mit dem es an uns ausgeliefert
wird.
Ich WEIß es ist da und das zu 100%, es gehört zur Standardsoftware dieses Gerätes mit dem es an uns ausgeliefert
wird.
... sagte der Kraftwerksingenieur, als im der Kessel um die Ohren flog.
Auch wenn DU das weißt, heißt das noch lange nicht, daß in gefühlt hundert Jahren, wenn keiner mehr weiß, was die Voraussetzungen für Dein skript waren, es noch dein Nachfolger weiß. Solche Skripte leben länger als man glaubt.
Ich bin letztens wieder üebr ein Skript gestolpert, daß ganz banale Sachen macht und schon seit NT3.51 auf diversen Servern sei Dasein fristet und inzwischen sogar unter W2K8 läuft, bis auf Pfadanpassungen unverändert. Ich hatte aber schon Schwierigkeiten, mich da wieder reinzudenken.
Also, programmier ordentlich und sieh das Unvorhersehbare vor! Dann hast Du auch in hundert Jahren noch deine Freude dran.
lks
Schnuckis.....
Wenn %1 "leer" ist - warum dann nicht gleich %1 abfragen?
Und wenn Zeile 15 in die Grütze greift, welche Ziffer ist höher und wie läuft eine Batch üblicherweise ab?
Oder kürzer?
Und was macht mir ein
Da kann ich auch ein
15. if "%scdia_in_directory%" neq "" goto start
16.
17. :start
16.
17. :start
Wenn %1 "leer" ist - warum dann nicht gleich %1 abfragen?
Und wenn Zeile 15 in die Grütze greift, welche Ziffer ist höher und wie läuft eine Batch üblicherweise ab?
Oder kürzer?
1 if egal was hier steht = waswasichdenn goto start
2 :start
2 :start
Und was macht mir ein
setlocal enableextensions
Wenn ich danach überhaupt keinen Errorlevel abfrage, ob der Befehl überhaupt akzeptiert wird?Da kann ich auch ein
@echo off>null 2>nul
malen - bringt genausoviel.