raedsche
Goto Top

Ersten 10 Stellen eines Dateinamen mittels Batch Datei überprüfen

Hallo zusammen

Leider habe ich für mein Problem noch keine Lösung gefunden.

Ich muss es irgendwie schaffen, das wenn Dateien vom einen in den anderen Ordner kopiert werden, nur die ersten zehn Stellen der Dateinamen verglichen werden. Sind diese ersten zehn Stellen gleich, soll die Datei überschrieben werden.
Alles andere was in dem Dateinamen hinter den ersten zehen Stellen folgt soll keine Rolle spielen.

Weiss jemand, wie ich das mit einer Batch-datei umsetzen kann?

Grüße

Raedsche

Content-Key: 114505

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

Printed on: April 25, 2024 at 19:04 o'clock

Mitglied: 77559
77559 Apr 23, 2009 at 10:40:12 (UTC)
Goto Top
Hallo Raedsche,

Gehen tut fast alles face-wink
Aber gib mal ein Beispiel der Dateinamen.

Wenn nur die ersten 10 Stellen verglichen werden und der Rest ungleich ist Überschreibst du ja eigentlich nicht. Soll der andere Dateiname dann gelöscht werden ?

Gruß
LotPings
Member: Raedsche
Raedsche Apr 23, 2009 at 11:07:49 (UTC)
Goto Top
Hallo LotPings

Gut das fast alles geht face-smile

Der Dateiname besteht bei den ersten zehn Stellen aus Ziffern (Barcode). Hinter diesem steht dann der Bearbeiter des Dokuments und dann kommt Datum und Uhrzeit.
z.B. 0000675677 - Müller - 2009-04-23.pdf

Wenn das Dokumnet mit dem selben Barcode jetzt nochmal abgelegt wird, unterscheidet sich auf alle Fälle das Datum. Daher kann ich das leider nicht komplett einfach überschreiben.

Kommt jetzt also der Barcode nochmal vor, sollen die ersten zehn Ziffern verglichen werden und wenn diese gleich sind, soll das alte Dokument geslöscht werden.

Jetzt soweit verständlich?

Gruß

Raedsche
Member: bastla
bastla Apr 23, 2009 at 11:27:18 (UTC)
Goto Top
Hallo Radesche!

Dann etwa so (ungetestet):
@echo off & setlocal
set "Von=D:\Quellordner"  
set "Maske=*.pdf"  
set "Nach=D:\Zielordner"  

for %%i in ("%Von%\%Maske%") do call :ProcessFile "%%i"  
goto :eof

:ProcessFile
set "Name=%~n1"  
echo del "%Nach%\%Name:~,10%*%~x1"  
echo copy %1 "%Nach%"  
goto :eof
Zur Sicherheit steht vor dem Lösch- (und auch vor dem Kopier-) Befehl ein "echo" - damit wird die Aktion nur angezeigt, aber nicht ausgeführt. Wenn die Testergebnisse vernünftig aussehen, das "echo" einfach entfernen (und am Ende des "copy"-Befehles noch ein ">nul" anfügen) ...

Grüße
bastla

[Edit] * in Zeile 11 nachgereicht [/Edit]
Mitglied: 77559
77559 Apr 23, 2009 at 11:44:58 (UTC)
Goto Top
Hallo bastla,,
um alle Namen mit gleicher Barcodenummer zu löschen fehlt IMO ein Stern
echo del "%Nach%\%Name:~,10%*.pdf" 

Gruß
LotPings
Member: Raedsche
Raedsche Apr 23, 2009 at 11:48:36 (UTC)
Goto Top
So, werde das ganze gleich mal ausprobieren. Werde mich dann mit dem Ergebnis melden.

Danke schonmal für die Mühe.

Gruß

Raedsche
Member: bastla
bastla Apr 23, 2009 at 11:50:15 (UTC)
Goto Top
@77559
Ja, leider (da stand zuerst %Maske%, aber mit *%~x1 ist's flexibler - beim Ändern ist dann der "*" unter dem Tisch gelandet) - ich korrigiere das oben auch noch.

Grüße
bastla
Member: Raedsche
Raedsche Apr 23, 2009 at 12:14:29 (UTC)
Goto Top
Also.. Habe es gerade getestet.

meine Batchdatei sieht nun folgendermaßen aus:

off & setlocal
set "Von=D:\ordner2"
set "Maske=*.pdf"
set "Nach=D:\ordner1"
for %%i in ("%Von%\%Maske%") do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "Name=%~n1"
del "%Nach%\%Name:~,10%*%~x1"
copy %1 "%Nach%" ">nul"
goto :eof

(Echo benötigen wir nicht, da ich auf einem Testsystem unterwegs bin)

Das Problem ist jetzt aber er, das er zwar die Ordner vergleicht, die Datei aber ion Ordner 2 liegen bleibt.
Ziel ist es aber, das die Datei dann in Ordner 1 ersetzt wird.

Möglich?

Gruß Raedsche
Member: bastla
bastla Apr 23, 2009 at 12:23:14 (UTC)
Goto Top
Hallo Raedsche!

"move" statt "copy" (oder ein "del" nachreichen)

Grüße
bastla

P.S.: Die Anführungszeichen um ">nul" waren nur zur Kennzeichnung/Abgrenzung im Text gedacht und gehören da nicht hin ...
Mitglied: 77559
77559 Apr 23, 2009 at 12:24:38 (UTC)
Goto Top
Ändere
copy %1 "%Nach%" ">nul"   
um in
move %1 "%Nach%" >NUL   

Gruß
LotPings
Member: bastla
bastla Apr 23, 2009 at 12:27:50 (UTC)
Goto Top
[OT]
@77559
Schön langsam könnten wir einen Dienstplan erstellen ... face-wink
[/OT]

Grüße
bastla
Member: Raedsche
Raedsche Apr 23, 2009 at 12:29:33 (UTC)
Goto Top
Danke Leute.

Habs jetzt mit einem Dokument mal schnell getestet und es funktioniert. Werde das ganze jetzt mal mit einigen mehr Dokumenten test und wenns dann funktioniert ist es perfekt.

Dank euch vielmals!

Gruß

Raedsche