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.
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 60135
Url: https://administrator.de/contentid/60135
Ausgedruckt am: 26.11.2024 um 05:11 Uhr
10 Kommentare
Neuester Kommentar
Moin,
wie wäre es denn mit
Psycho
wie wäre es denn mit
ren Dateie???????????????.dbf ...
Psycho
Moin Sevensins,
dann kaue ich dir mal die Lösung vor. Also die Lösung ist klar, eine for - Schleife.
Hier mal Version 0.2:
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...
Gruß
Dani
dann kaue 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"
)
Gruß
Dani
wenn du meine zusatzfrage noch lösen kannst dann wärs ja kaum auszuhalten
@Dani: dann lass es lieber!
Psycho
@psycho Dad
Hmmm....ich überlege gerade noch!
@Sevensins
Da fällt mir gerade eine Lösung ein:
Ungetestet natürlich...ansonsten kann kommt die Lösung von einer unseren Experten!
Gruß
Dani
Hmmm....ich überlege gerade noch!
@Sevensins
Da fällt mir gerade eine Lösung ein:
...
ren "%dest_dir%\%%a" "%dest_dir%\%%a:~0,6"
..
Gruß
Dani
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
a) mit ohne EnableDelayedExpansion
[Ungetestete Skizzen abgeleitet aus Danis v02.]
Gruss
Biber
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
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
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