Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

If kaskade in Batch

Frage Entwicklung Batch & Shell

Mitglied: Tolwyn

Tolwyn (Level 1) - Jetzt verbinden

27.08.2008, aktualisiert 22:58 Uhr, 4060 Aufrufe, 5 Kommentare

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)
01.
25.08.2008  12:08               295 textdatei_auslesen.bat
Die Batchdatei:
01.
@ECHO ON 
02.
 
03.
for /F "tokens=3* delims= " %%I in (F:\log.txt) DO ( 
04.
 
05.
::noch nicht verwendet; evtl für verwendung außerhalb der schleife 
06.
Set groesse =%%I 
07.
Set name =%%J 
08.
 
09.
	IF EXIST F:\test2\%%J (	ECHO Datei existiert bereits )	ELSE (Copy "F:\test\%%J" "F:\test2\")	 
10.
	 
11.
)
Jetzt wollte ich bei dem IF eigentlich dazu übergehen eine IF-Kaskade zu machen, wie in Java:
01.
if(//existiert datei?)  
02.
03.
  if( //ist quelldatei größer als zieldatei?) 
04.
05.
     if(//ist quelldatei um mindestens 2MB größer?)  
06.
07.
       etc etc etc... 
08.
09.
10.
   else  
11.
12.
13.
}

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
Mitglied: miniversum
27.08.2008 um 13:55 Uhr
Das IF und ELSE kann man ja auch nicht auf mehrere Zeilen verteilen?
Doch das geht:
01.
IF EXIST F:\test2\%%J ( 
02.
  IF "F:\test2\%~zJ" GTR %%I ( 
03.
    ECHO Datei existiert 
04.
  ) ELSE ( 
05.
    Copy "F:\test\%%J" "F:\test2\" 
06.
07.
)
Wenn du allerdings sowieso mit %~zJ arbeitest müstest du die temponääre logdatei ncith umbedingt anlegen.
Das geht dann auch so:
01.
FOR /F "delims=" %%J in ('dir /b "F:\test\*.*"') do ( 
02.
  IF EXIST F:\test2\%%J ( 
03.
    FOR /F "delims=" %%I in ('dir /b "F:\test2\%%~nxI"') do ( 
04.
      IF "F:\test2\%%~zJ" GTR %%~zI ( 
05.
        ECHO Datei existiert 
06.
      ) ELSE ( 
07.
        Copy "F:\test\%%J" "F:\test2\" 
08.
09.
10.
11.
)
Bitte warten ..
Mitglied: bastla
27.08.2008 um 14:27 Uhr
... und mit analoger Vorgangsweise, aber Verwendung eines Schalters:
01.
@echo off & setlocal 
02.
set "Quelle=F:\test" 
03.
set "Ziel=F:\test2" 
04.
 
05.
for %%i in ("%Quelle%\*.*") do ( 
06.
    set DoIt= 
07.
    if not exist "%Ziel%\%%~nxi" ( 
08.
        set Doit=true 
09.
    ) else ( 
10.
        for %%j in ("%Ziel%\%%~nxi") do if %%~zi gtr %%~zj set Doit=true 
11.
12.
    If defined DoIt copy "%%i" "%Ziel%\">nul && echo %%~nxi 
13.
)
Grüße
bastla
Bitte warten ..
Mitglied: miniversum
27.08.2008 um 14:40 Uhr
Ich bin mir nicht sicher ob das so funktioniert.
Werden variabeln die in Klammern (von der For-Schleife) gesetzt werden nicht erst danach aufgelöst?
das if defined DoIt würd da doch dan garnicht funktionieren, oder liege ich jetzt falsch?
Bitte warten ..
Mitglied: bastla
27.08.2008 um 16:48 Uhr
@miniversum

... oder liege ich jetzt falsch?
Ja.

Grüße
bastla
Bitte warten ..
Mitglied: Tolwyn
27.08.2008 um 22:58 Uhr
hi

danke für eure Lösungen.
Hat soweit ganz gut funktioniert.

Die Frage ist damit erstmal gelöst.

Gruß

Tolwyn
Bitte warten ..
Ähnliche Inhalte
Router & Routing
Routingproblem in Homerouter-Kaskade mit Raspi (9)

Frage von Oldschool zum Thema Router & Routing ...

Batch & Shell
gelöst Teile eines Dateinamens ändern mit Batch Datei (4)

Frage von fffffuuuuuuuhhhh zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch: CPU-Auslastung eines Prozesses auslesen und als Variable definieren (2)

Frage von tralveller zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch um Benutzer aus Sitzung abzumelden (15)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(8)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte