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, 4043 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...