sevensins
Goto Top

Batch - Dateien umbenennen Verschieben und Dateien von mit bestimmten Zeichen im Dateinamen von der Umbenennung ausschliessen

Hallo Ich hab eine ziemlich profane Frage zum Umbenennen und Verschieben mehrerer Dateien. Also das Namensmuster der zu bennenenden Dateien ist Wie folgt...

DATEI: "Dateie20070521_123456.dbf"
jedoch gibt es auch eine sogenannte Peakdatei dazu die sich minimal von der eigentlich benötigten Datei unterscheidet.

Peakdatei: "Dateie20070521_123456pk.dbf"

Von den hier beschriebenen Dateien soll jedoch nur die Erste umbenannt werden und in ein vorgegebenes Verzeichnis(z.b. von C:\Daten nach D:\Archiv) verschoben werden.
Die Umbennung sollte So aussehn:
"Dateie20070521_123456.dbf" => "Dateie.dbf"

Ich bin schlicht und ergreifend zu blöd den Namens-String nach "pk" zu filtern und die Datei von der Umbennung auszuschliessen meine aber dass man das irgendwie sehr einfach lösen können müsste. Ich wär sehr glücklich wenn sich ein Batchexperte mal die 5 Minuten nimmt und mir ein Beispiel hier reinposted. Danke für Hilfe im Vorraus.


Ich kenne mich zwar mit Programmierung in versch. Sprachen aus möchte mich aber jetz für diese Aufgabe nich auch noch mit derSyntax auseinandersetzen. Einem Versierten Shell-Coder dürfte es allerdings sehr leicht fallen mein Problem zu lösen nehme ich an.

Meine Idee wenn ichs in VB machte wär das ganze mit nem Stringvergleich zu filtern dann umzubenennen nur möchte ich den Komfort einer Batch gerne benutzen da ich so die Verzeichnisse immer mal schnell anpassen kann und nicht erst das ding neu Kompilieren muss.

Content-ID: 60135

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

Ausgedruckt am: 26.11.2024 um 05:11 Uhr

8644
8644 30.05.2007 um 09:06:17 Uhr
Goto Top
Moin,

wie wäre es denn mit

ren Dateie???????????????.dbf ...

Psycho
Sevensins
Sevensins 30.05.2007 um 09:38:33 Uhr
Goto Top
Ich verstehe was du mir damit sagen möchtest ganz gut glaub ich. Nur wär ich für ne Skizze dankbar. Ich hatte eigentlich gedacht ich les dann in der Antwort das Skript. Kann mir vorstellen dass mehr Leuete so ein Werkzeug gebrauchen können. Das mit dem ? hab ich auch schon probiert wobei dadurch aber keine Filterung nach pk stattfindet so wie ichs gern hätte....


Danke aber schonmal für die Mühe.
Dani
Dani 30.05.2007 um 10:28:28 Uhr
Goto Top
Moin Sevensins,
dann kaue face-wink ich dir mal die Lösung vor. Also die Lösung ist klar, eine for - Schleife.

Hier mal Version 0.2:
@echo off & setlocal
::
set src_dir=c:\daten
set dest_dir=d:\archiv

::
for /f  %%a in ('dir /b *.dbf ^| findstr /v /l "pk"') do (  
move "%src_dir%\%%a" "%dest_dir%"  
ren "%dest_dir%\%%a" "%dest_dir%\Dateie.dbf"  
)
Ungetestete Skizze. Dir ist schon klar, dass diese Datei (die umbenannt wird) immer überschrieben wird. Mit findstr kann man Dateien ausschließen, die einen bestimmen String beinhalten. Vorsichtshalber erstmal beide Ordner sichern... face-wink


Gruß
Dani
Sevensins
Sevensins 30.05.2007 um 10:56:50 Uhr
Goto Top
Hi. Finds klase dass Ihr mir helft. Vielen Dank dafür.

@ Dani : die Skizze funktioniert was das filtern und Verschieben angeht schon gut nur was mich ein wenig stutzig macht ist in der Skizze "Dateie.dbf"

Es ging mir ja darum dass es mehrere verschiedene Dateien Sind also DATEIE, DATEIB, DATEIC usw.... Im Grunde geht es nach dem Verschieben also darum die Dateien auf SECHS Zeichen abzukürzen... den Datumsstempel und andern Schmonz also zu entfernen.
Gibt es eine Möglichkeit die Länge von Vorne festzulegen?

ansonsten funktionieren sortieren und Verscheiben spitze.

Danke schon dafür...wenn du meine zusatzfrage noch lösen kannst dann wärs ja kaum auszuhalten face-smile
8644
8644 30.05.2007 um 11:04:20 Uhr
Goto Top
wenn du meine zusatzfrage noch lösen kannst dann wärs ja kaum auszuhalten

@Dani: dann lass es lieber! face-wink

Psycho
Dani
Dani 30.05.2007 um 11:13:19 Uhr
Goto Top
@psycho Dad
Hmmm....ich überlege gerade noch! face-smile

@Sevensins
Da fällt mir gerade eine Lösung ein:
...
ren "%dest_dir%\%%a" "%dest_dir%\%%a:~0,6"  
..
Ungetestet natürlich...ansonsten kann kommt die Lösung von einer unseren Experten!


Gruß
Dani
Sevensins
Sevensins 30.05.2007 um 12:16:01 Uhr
Goto Top
klingt logisch dein Beispiel Dani nur leider funktioniert der Code nicht.


Habe deine Änderung sowohl innerhalb des Schleifendurchlaufs als auch nach der Schleife getestet da das die logischen Orte wären wo ich die Funktion rufen würde.


kann es sein dass "ren" nicht auf WinXp funktioniert? klingt blöd aber kann ja sein dass es ein 98 Kommando ist oderso.

Genauso möchte ich anmerken dass der Movebefehl syntaktisch sehr schön aussieht aber wie ich bei der Forenrecherce feststellen musste stirbt der Move-Beehl weg wenn man übers Netzwerk auf einen UNC-Pfad oder ein gemapped Laufwerk schieben möchte.

Ich weiss wie ich das hinbekomme wollte es aber nur für andere Leser meines Posts mal anmerken. Ich benötige nur noch Hilfe bei dieser "Ren"-Geschichte.

Danke und sorry dasses länger dauert als erwartet. face-smile
Biber
Biber 30.05.2007 um 13:27:46 Uhr
Goto Top
Moin Sevensins,

Im Prinzip hat Dani Recht, aber auf dynamische Variablen (=die Zählvariablen einer FOR-Anweisung) lassen sich keine SubString-"Funktionen" anwenden unter der CMD.exe.
Das geht nur bei statischen Variablen (= alles, was mit "SET variable=whatever") im CMD-Environment eingerichtet ist.

Also:
Hier mal Version 0.3:


a) mit EnableDelayedExpansion
@echo off & setlocal EnableDelayedExpansion
::
set src_dir=c:\daten
set dest_dir=d:\archiv 
::
for /f  %%a in ('dir /b *.dbf ^| findstr /v /l "pk"') do (  
move "%src_dir%\%%a" "%dest_dir%"  
Set "DateiName=%%~a"  
ren "%dest_dir%\%%a" "!Dateiname:~0,6!.dbf"  
)

a) mit ohne EnableDelayedExpansion
@echo off & setlocal 
Set dir=c:\daten
set dest_dir=d:\archiv 
::
for /f  %%a in ('dir /b *.dbf ^| findstr /v /l "pk"') do  Goto :MachwasMit "%%a"  
goto :eof

:MachwasMit Parameter1 ist der Dateiname + Extension (kein Pfad, kein Lw)
move "%src_dir%\%~1" "%dest_dir%"  
Set "DateiName=%~n1"  
ren "%dest_dir%\%Dateiname:~0,6%.dbf"  
)

[Ungetestete Skizzen abgeleitet aus Danis v02.]

Gruss
Biber
Biber
Biber 02.06.2007 um 23:13:46 Uhr
Goto Top
Moin sevensins,

ich habe zufällig gesehen, dass Du auf die Antworten zu Deiner Anforderung auch in einem anderen Forum seit dem 30.5. nicht mehr geantwortet hast.
Deshalb wollte ich mal nachfragen, ob Du die Lösung eventuell in einem dritten oder vierten Forum erhalten hast.

Und darum bitten, falls die vielen weltweit für Dich tätigen Heinzelmännchen eine Lösung gemeinschaftlich für Dich erarbeitet haben sollten, ob Du dieses finale Ergebnis eventuell auch hier veröffentlichen würdest.

Dann könnten wir den Thread nämlich mal schliessen...

Grüße
Biber
Biber
Biber 13.06.2007 um 19:36:34 Uhr
Goto Top
Nachtrag zu meinem letzten "Dann könnten wir den Thread nämlich mal schliessen...":

Das können wir aber auch tun, wenn Du nicht mit mir sprechen magst. Da bin ich flexibel.

Beitrag geschlossen.

P.S. Wenn Du noch mal eine Frage in diesem Forum stellst, benutze lieber einen anderen Nick.
Biber