If kaskade in Batch
Hallo
ich schreibe vielleicht erstmal was ich überhaupt machen will, eventuell gibt es dafür ja auch eine bessere lösung und dann mein eigentliches problem:
Ich habe zwei Ordner mit mehr oder weniger dem gleichen Inhalt (gleiche Dateinamen). Die Dateigrößen unterscheiden sich aber.
Es kann dabei sein, dass in Ordner A (fiktive "Quelle") die größere der beiden Dateien ist oder in Ordner B (fiktives "Ziel").
Alle Dateien sollen kopiert werden, aber wenn in der Quelle eine Datei eine geringere oder gleiche Größe ( <= ) hat als im Zielordner, soll sie nicht kopiert werden.
Meine Idee war mit einer FOR-Schleife eine Liste des Quellordners zu erstellen, Größe und Name der Datei zu speichern und dann mit der Datei im Zielordner zu vergleichen.
Logdatei aufbau: (eine Dir ausgabe)
Die Batchdatei:
Jetzt wollte ich bei dem IF eigentlich dazu übergehen eine IF-Kaskade zu machen, wie in Java:
So hab ichs mal probiert:
IF EXIST F:\test2\%%J ( IF "F:\test2\%~zJ" GTR %%I (ECHO Datei existiert) ELSE (Copy "F:\test\%%J" "F:\test2\"))
Wie würde das richtig gehen?
Das IF und ELSE kann man ja auch nicht auf mehrere Zeilen verteilen?
Gruß
Tolwyn
ich schreibe vielleicht erstmal was ich überhaupt machen will, eventuell gibt es dafür ja auch eine bessere lösung und dann mein eigentliches problem:
Ich habe zwei Ordner mit mehr oder weniger dem gleichen Inhalt (gleiche Dateinamen). Die Dateigrößen unterscheiden sich aber.
Es kann dabei sein, dass in Ordner A (fiktive "Quelle") die größere der beiden Dateien ist oder in Ordner B (fiktives "Ziel").
Alle Dateien sollen kopiert werden, aber wenn in der Quelle eine Datei eine geringere oder gleiche Größe ( <= ) hat als im Zielordner, soll sie nicht kopiert werden.
Meine Idee war mit einer FOR-Schleife eine Liste des Quellordners zu erstellen, Größe und Name der Datei zu speichern und dann mit der Datei im Zielordner zu vergleichen.
Logdatei aufbau: (eine Dir ausgabe)
25.08.2008 12:08 295 textdatei_auslesen.bat
Die Batchdatei:
@ECHO ON
for /F "tokens=3* delims= " %%I in (F:\log.txt) DO (
::noch nicht verwendet; evtl für verwendung außerhalb der schleife
Set groesse =%%I
Set name =%%J
IF EXIST F:\test2\%%J ( ECHO Datei existiert bereits ) ELSE (Copy "F:\test\%%J" "F:\test2\")
)
Jetzt wollte ich bei dem IF eigentlich dazu übergehen eine IF-Kaskade zu machen, wie in Java:
if(//existiert datei?)
{
if( //ist quelldatei größer als zieldatei?)
{
if(//ist quelldatei um mindestens 2MB größer?)
{
etc etc etc...
}
}
else
{
}
}
So hab ichs mal probiert:
IF EXIST F:\test2\%%J ( IF "F:\test2\%~zJ" GTR %%I (ECHO Datei existiert) ELSE (Copy "F:\test\%%J" "F:\test2\"))
Wie würde das richtig gehen?
Das IF und ELSE kann man ja auch nicht auf mehrere Zeilen verteilen?
Gruß
Tolwyn
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 95427
Url: https://administrator.de/contentid/95427
Ausgedruckt am: 22.11.2024 um 11:11 Uhr
5 Kommentare
Neuester Kommentar
Das IF und ELSE kann man ja auch nicht auf mehrere Zeilen verteilen?
Doch das geht:IF EXIST F:\test2\%%J (
IF "F:\test2\%~zJ" GTR %%I (
ECHO Datei existiert
) ELSE (
Copy "F:\test\%%J" "F:\test2\"
)
)
Das geht dann auch so:
FOR /F "delims=" %%J in ('dir /b "F:\test\*.*"') do (
IF EXIST F:\test2\%%J (
FOR /F "delims=" %%I in ('dir /b "F:\test2\%%~nxI"') do (
IF "F:\test2\%%~zJ" GTR %%~zI (
ECHO Datei existiert
) ELSE (
Copy "F:\test\%%J" "F:\test2\"
)
)
)
)
... und mit analoger Vorgangsweise, aber Verwendung eines Schalters:
Grüße
bastla
@echo off & setlocal
set "Quelle=F:\test"
set "Ziel=F:\test2"
for %%i in ("%Quelle%\*.*") do (
set DoIt=
if not exist "%Ziel%\%%~nxi" (
set Doit=true
) else (
for %%j in ("%Ziel%\%%~nxi") do if %%~zi gtr %%~zj set Doit=true
)
If defined DoIt copy "%%i" "%Ziel%\">nul && echo %%~nxi
)
bastla