bkamk2
Goto Top

Vergleichen von Dateigrößen per Batch

Hab euch gestern entdeckt und hoffe ihr könnt mir helfen.

Also ich bin ein totaler Programier noob.
Hab kurz Java gemacht aber nicht wirklich verstanden und wollte einen neustart mit der Batch Programierung machen.

Also ich brauch eine Batch, die jeweils 2 Dateien mitteinander vergleicht. Entscheident dafür ist die Größe und der Name.
Insgesamt sind es 6 Dateien, also 3 mal 2 Dateien vergleichen.
Die Dateien sind in 2 verschiedenen Ordner einer ist Lokal auf jedem Rechner und einer (der aktuelle) ist auf unserem Server.
Die Dateien gibt es jeweils 2 mal...also 2 mal packages.xml, 2 mal hosts.xml und 2 mal profiles.xml.

Also Quasi so:

Updates Ordner auf Server

:::profiles.xml:::
:::packages.xml:::
:::hosts.xml:::

Lokaler Ordner auf Rechnern

::profiles.xml:::
:::packages.xml:::
:::hosts.xml:::

Die profiles.xml soll mit der anderen profiles.xml verglichen werden.
Die hosts.xml soll mit der hosts.xml verglichen werden.
Und die packages.xml soll mit der packages.xml verglichen werdeb.

Also entscheident sollten die Größe der dateien sein.
Diese unterscheiden sich aber nur minimal.
Also 15kb zu 15,2kb oder so...

Ich werde später noch mehr hilfe brauchen aber ich hab das der übersicht halber mal editiert.^^

Danke schonmal für eure Hilfe!

Gruss BKAMk2

Content-ID: 68365

Url: https://administrator.de/forum/vergleichen-von-dateigroessen-per-batch-68365.html

Ausgedruckt am: 23.12.2024 um 19:12 Uhr

miniversum
miniversum 11.09.2007 um 18:28:43 Uhr
Goto Top
Mal ungetestet und nur für eine der Drei paare so (die andern gehen dan entsprechend):
@echo off
set localdir="C:"
set serverdir="X:"
FOR /F "delims= " %%l in ('dir /b "%localdir%\profiles.xml"') do set localsize=%~zl
FOR /F "delims= " %%s in ('dir /b "%serverdir%\profiles.xml"') do set serversize=%~zs
if %localsize% gtr %serversize% (
echo locale Datei ist groesser
) else (
echo Datei auf Server ist groesser
)

miniversum
BKAMk2
BKAMk2 12.09.2007 um 08:15:05 Uhr
Goto Top
Danke schonmal miniversum.

Leider treten bei mir 2 Fehler auf.

1. Die folgende Verwendung des Pfadparameters zur Ersetzung eines Batchparameters ist ungültig: %~zl

2. Geben Sie CALL /? oder FOR /? ein, um herauszufinden, welche Formate gültig sind.
Syntaxfehler.

Was soll ich machen? Wie kann ich die Fehler beseitigen? Und warum werden keine Netzlaufwerke erkannt?!?

Danke
Biber
Biber 12.09.2007 um 08:34:54 Uhr
Goto Top
Moin BKAMk2,

ändere mal bitte die beiden SET-Zuweisungen, z.B.
....set localsize=%~zl
...so ab, dass vor der dynamischen Variablen ZWEI Prozentzeichen stehen. Also:
--->....set localsize=%%~zl

Dann passt es besser.

Grüße
Biber
BKAMk2
BKAMk2 12.09.2007 um 08:55:21 Uhr
Goto Top
Danke Biber.

Der Syntaxfehler ist draussen.
Bleiben nur noch die anderen =)

Also ich poste mal meine batch Datei und die Ausgabe:
>echo


>SET localdir=C:\Updates
>SET serverdir=\\130.30.2.21\buhralex\wpkg
>
>FOR /F "delims= " %%l in ('dir /b "%localdir%\profiles.xml"') do set localsize=%%~zl  
>FOR /F "delims= " %%s in ('dir /b "%serverdir%\profiles.xml"') do set serversize=%%~zs  
>if %serversize% gtr %slocalsize%(
>
>echo Bitte starten Sie das WPKG
>)
>
>else (
>
>echo Keine neuen Updates.
>)

Ausgabe:

>H:\>Dateivergleich.bat
>
>H:\>echo
>ECHO ist eingeschaltet (ON).
>
>H:\>SET localdir=C:\Updates
>
>H:\>SET serverdir=\\130.30.2.21\buhralex\wpkg
>
>H:\>FOR /F "delims= " %l in ('dir /b "C:\Updates\profiles.xml"') do set localsiz  
>e=%~zl
>
>H:\>set localsize=
>
>H:\>FOR /F "delims= " %s in ('dir /b "\\130.30.2.21\buhralex\wpkg\profiles.xml"'  
>) do set serversize=%~zs
>
>H:\>set serversize=
>"(" ist syntaktisch an dieser Stelle nicht verarbeitbar.  
>
>H:\>if  gtr (
Wo liegt jetzt das Problem??


[Edit Biber] Als < code > formatiert. [/Edit]
Biber
Biber 12.09.2007 um 09:06:59 Uhr
Goto Top
Moin BKAMk2,

soweit ich es lesen kann.. face-wink

--->Falsch : ...if %serversize% gtr %slocalsize%(

--->Richtiger: ...if %serversize% gtr %localsize% (

Bitte nutze beim Posten die -Formatierung. Beispiel in Deinem letzten Kommentar.

Grüße
Biber

P.S. Anmerkung:
Statt: FOR /F "delims= " %%l in ('dir /b "%localdir%\profiles.xml"') do set localsize=%%~zl
Reicht: FOR %%l in ('"%localdir%\profiles.xml") do set localsize=%%~zl
BKAMk2
BKAMk2 12.09.2007 um 09:27:55 Uhr
Goto Top
Mach ich das nächste mal.

Wusste nicht wie^^

Hab deine Vorschläge befolgt hab aber immer noch den Fehler:

H:\>set serversize=
"(" ist syntaktisch an dieser Stelle nicht verarbeitbar.  
Biber
Biber 12.09.2007 um 10:30:06 Uhr
Goto Top
Moin BKAMk2,

bitte poste doch noch mal die komplette Batchdatei in einem
-Tag.

Eventuell hast Du hier in miniversums Skizze:

if %localsize% gtr %serversize% (
echo locale Datei ist groesser
) else (
echo Datei auf Server ist groesser
)
... ein paar Leerzeilen
-oder-
eine der Dateien wird nicht gefunden und die %xxxsize%-Variable ist dadurch undefiniert.

In letzterem Fall würde ein Syntaxfehler auftreten, den Du vermeiden kannst durch:
---> if defined %localsize% if defined %serversize% if %localsize% gtr %serversize% ( ...

Sieht hässlich aus, erspart aber noch hässlichere Fehlermeldungen.

Grüße
Biber
BKAMk2
BKAMk2 12.09.2007 um 10:43:59 Uhr
Goto Top
habe alles nochmal auf leerzeilen untersucht.
Sind keine da.

Wenn ich den Befehl:

In letzterem Fall würde ein Syntaxfehler auftreten, den Du vermeiden kannst durch:
---> if defined %localsize% if defined %serversize% if %localsize% gtr %serversize% ( ...

eingebe gibt er mir beide Echo's nacheinander aus.

Hier nochmal die Batch:

echo
SET localdir=C:\Updates
SET serverdir=\\130.30.2.21\buhralex\wpkg
FOR %%l in ('"%localdir%\packages.xml") DO set localsize=%%~zl  
FOR %%s in ('"%serverdir%\packages.xml") DO set serversize=%%~zs  
if %localsize% gtr %serversize% (
echo Bitte starten Sie das WPKG
) else (
echo Keine neuen Updates
)


[Edit BKAMk2] Funktioniert jetzt. Hab die hochkommatra in den Zeilen:

FOR %%l in ('"%localdir%\packages.xml") DO set localsize=%%~zl  
FOR %%s in ('"%serverdir%\packages.xml") DO set serversize=%%~zs  

rausgenommen.

Bin gerade dabei mit Javascript was zu schreiben damit dem User nachher eine Bildschirm Meldung ausgegeben werden kann.

Vielen Dank für eure Hilfe.

BKAMk2
Biber
Biber 12.09.2007 um 17:52:41 Uhr
Goto Top
Moin BKAMk2,

sorry, tut mir Leid mit meinem mitge-Copy&Paste-ten einfachen Hochkomma.

Freut mich aber, dass Du es zum Fliegen gebracht hast.

Ich schließe mal diesen Beitrag, denn das eigentliche Anliegen scheint jetzt gelöst zu zu sein.

Grüße
Biber