cavalera
Goto Top

Batch: Dateien auf Namen vergleichen/ ohneTool

Hallo

habe zu meiner Frage in artverwandten Beiträgen nur Verweise auf Tools gefunden,
ich brauche aber eine batch die ich bei jedem meiner Datenbankanwender auf den Rechner packen kann. Diese soll in dem Netz Ordner "Quelle" nach der Datei "Datenbank_1.0.ade" gucken
und das mit dem Lokalen Ordner "Ziel" abgleichen. Ist dort die Datei Datenbank_1.0.ade vorhanden soll er die starten, wenn nicht und die Datei zum Beispiel "Datenbank_0.9.ade" heißt soll die 1.0 vom Netz dort in das Zielverzeichnis kopiert und dann ausgeführt werden.

Also so das der User immer die aktuellste Version der Datei startet.
Ich weiß das ich das auch über das Änderungsdatum machen könnte, nur würde ich das gerne so lösen. Ich habe von Shell programmieren keine Ahnung, deswegen die Frage ob das so gehen würde??
kann ich die Dateien mit der Konvention überhaupt vergleichen, oder sollte man sie lieber Datenbank_001 nennen, zum Beispiel?


Für Hilfe währe ich sehr dankbar.

Content-Key: 50198

Url: https://administrator.de/contentid/50198

Printed on: April 23, 2024 at 07:04 o'clock

Member: anding
anding Jan 30, 2007 at 10:03:51 (UTC)
Goto Top
Ich versuch mich mal, weiß aber nicht ob ich dich richtig verstanden hab, bzw. ob's so elegant ist...

If exist <Pfad>\Datenbank_1.0.ade (call <Pfad>\<Prog>) ELSE GOTO :NICHTDA
exit
:NICHT DA
xcopy <Quelle> <Ziel>
call <Pfad>\<Prog>

so hätte ich jetzt versucht das ganze zu Lösen... Aber hier gibts normalerweise Spzialisten, also wart lieber noch ein wenig... ;)
Member: cavalera
cavalera Jan 30, 2007 at 10:13:14 (UTC)
Goto Top
Danke das ist echt super so. Reicht vollkommen
nur weiß die batch ja nicht welche die aktuellste version ist die da liegt. also 1.0 oder 9.1 darf ich da ja nicht angeben. Also wie mach ich das dass der auch guckt, ob meintewegen die letzten drei zeichen kleiner sind, dann kopieren wenn nicht dann so lassen und starten?
Member: Biber
Biber Jan 30, 2007 at 10:27:11 (UTC)
Goto Top
...indem Du irgendwo auf dem (oder einem) Server an einem definierten Ort eine Datei hinterlegst, die den "richtigen" Datenbank-Versionsnamen hat.

Beispiel: Wenn alle Clients auf den ServerABC zugreifen können/dürfen, legst Du dort in einem Verzeichnis ein Unterverzeichnis "CurrentVersion" oder "AktuelleDB" an.
Und dort existiert dann eine einzige Datei, die "Datenbank_0.902d.ade" heißt, 0 byte groß ist und nur von Dir allein geändert werden kann (alle Clients haben nur Leserechte).

Gruß
Biber
Member: cavalera
cavalera Jan 30, 2007 at 10:38:28 (UTC)
Goto Top
Das würde ja mit der ADE Datei selbst gehen die heißt ja dann "soundso_v.001" also wenn die genauso heißt wie die aufm Rechner dann starte wenn nich dann xcopy und starte: super versteh ich, danke ;)
Kann man mir noch ne Hilfe empfehlen, ich weiß ja nicht wie das geht, irgendwie muss ich aber ja die Ordnerinhalte vergleichen ohne nen expliziten Dateiname zu nenen, also datei mit endung ade in Netzwerk = datei mit ADe auf D: = ? JA Dann usw...

hätte das Kenzeptionell jetzt so, bloß die Syntax is ja nicht so, also wie guck ich nach einer Datei derer name in einer variablen steht usw?
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
DateinameLokal = D:\Ordner\*.ade


If exist \\devwaghad43004\Fehlerrueckmeldung-Zp5\Quelle\DateinameLokal
(call D:\Ordner\DateinameLokal)
ELSE GOTO :NICHTDA

exit

:NICHT DA

xcopy \\devwaghad43004\Fehlerrueckmeldung-Zp5\Quelle\*.ade D:\Ordner\*.ade

call D:\Ordner\*.ade
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Member: Biber
Biber Jan 30, 2007 at 18:24:22 (UTC)
Goto Top
Ich versuch noch mal einen Ansatz, cavalera,

spiel es am besten am CMD-Prompt nach.

Wenn Du eine von mehreren Dateien mit z.b. gleicher Dateiendung aus einem Verzeichnis "wählen" willst und das Kriterium soll sein :"die Neueste" oder "die Älteste", geht es am einfachsten mit Hilfe des Dir-Befehls.

[Am CMD-Prompt:]
for /f %i in ('dir /b /o:d D:\Ordner\*.ade') do @echo %i

...das würde Dir die "Neueste" *.ade-Datei aus D:\Ordner zeigen.

Diese in eine Variable speichern ginge so:
for /f %i in ('dir /b /o:d D:\Ordner\*.ade') do @set AktuelleADE=%i

...und dann kannst Du mit "if exist \\devwaghad43004\Fehlerrueckmeldung-Zp\Quelle\%AktuelleADE%" prüfen, ob eine gleichnamige auf dem Server ist.

Oder, falls der Server den Ton angibt 8was ich für wahrscheinlicher halte):
for /f %i in ('dir /b /o:d \\devwaghad43004\Fehlerrueckmeldung-Zp\Quelle\*.ade') do @set AufmServerADE=%i
if not exist D:\ordner\%AufmServerAde% [installiere-Serverversion-auf-Client]

Im Batch jeweils zwei %-Zeichen vor den Zählvariablen, also %%i statt %i.

HTH
Biber