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, 4066 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
Batch & Shell
Mehrzeiligen Powershell-Befehl mit Batch ausführen (3)

Frage von Compu2017 zum Thema Batch & Shell ...

Batch & Shell
gelöst EQU - GLEICH - BATCH (9)

Frage von freshman2017 zum Thema Batch & Shell ...

Batch & Shell
gelöst Windows 10 Batch für Datum und Uhrzeit setzen (18)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Tipps & Tricks

Wie Hackt man sich am besten in ein Computernetzwerk ein

(29)

Erfahrungsbericht von Herbrich19 zum Thema Tipps & Tricks ...

Humor (lol)

Bester Vorschlag eines Supporttechnikers ever: APC

(15)

Erfahrungsbericht von DerWoWusste zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
Netzwerke
LAN2LAN Verbindung sehr langsam flaschenhals gesucht (27)

Frage von PixL86 zum Thema Netzwerke ...

LAN, WAN, Wireless
Rogue Access Point (20)

Frage von Axel90 zum Thema LAN, WAN, Wireless ...

Webbrowser
Windows 7 unbeliebte Internetseite sperren (13)

Frage von Daoudi1973 zum Thema Webbrowser ...

E-Mail
Fake E-Mail in Outlook für Demonstartionszwecke (12)

Frage von sascha382 zum Thema E-Mail ...