nudl92
Goto Top

Dateien mit Batch nach Namensanfang in verschiedene Ordner kopieren bzw umbenennen

Hallo zusammen,

ich habe vorab versucht durch andere Threads mein Problem zu lösen und mich in die Batch-Programmierung einzulesen, da meine Frage zu den anderen doch sehr ähnlich ist und recht häufig vorkommt. Da sich das ganze jedoch als schwieriger herausgestellt hat als erwartet, hoffe ich auf eure Unterstützung.Hier nun mein Problem:

Grundsätzlich möchte ich Dateien in verschiedene Ordner kopieren und gegebenenfalls umbennen. Auswahlkriterium ist hierbei der Name der Dateien.
Ich habe ein Hauptverzeichnis, in dem alle Dateien hinterlegt sind, diese haben z.B den Namen:
"G01 Box21 13.04.08-15.36.25" ; "G01 Box21 13.04.10-15.12.25"
"G02 Box21 13.04.08-15.42.50" ; "G02 Box21 13.04.10-15.10.02"
"G03 Box21 13.04.08-15.55.20" usw. (Gxx xxxxx Datum-Uhrzeit)
Nun möchte ich je nach Namensanfang, also G01,G02,G03 usw, die Dateien in verschiedene Ordner kopieren (Ordner und Hauptverzeichnis auf selbem Laufwerk). Diese sind schon vorab erstellt und benannt. Schwierigkeit bereitet haben mir dabei die Leerzeichen im Dateinamen...
Wenn möglich wäre es gut, die Dateien noch wie folgt unzubenennen:
Von "G01 Box21 13.04.08-15.36.25" zu z.B. "G01 VV90T 13.04.08-15.36.25", wobei nur alle mit dem selben Namensanfang gleich umbenannt werden sollen, sprich
"G02 Box21 13.04.08-15.42.50" soll hingegen zu "G02 VV120T 13.04.08-15.42.50" umbenannt werden. Dabei können die Bezeichnung wie "Box21", sowie "VV90T" variabel lang sein. Das Umbenennen wäre nur der "Feinschliff", wichtig wäre erstmal die Dateien in verschiedene Ordner zu kopieren. (Ich habe bewusst die Pfade und Namen, zu denen die Dateien umbenannt werden sollen, nicht explizit angegeben, da die Batch-Datei möglichst allgemeingültig sein soll, natürlich nur wenn das möglich ist)
Ich hoffe ich habe alle wichtigen Infos abgedeckt und bedanke mich schonmal im Voraus face-smile

MFG Nudl92

Content-Key: 206282

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

Printed on: April 18, 2024 at 13:04 o'clock

Member: bastla
bastla May 10, 2013 updated at 09:55:32 (UTC)
Goto Top
Hallo Nudl92 und willkommen im Forum!

Schematisch etwa so:
for %%i in ("D:\Alter Pfad\G0? Box*.*") do for /f "tokens=1,2*" %%a in ("%%~nxi") do @echo xcopy "%%i" "D:\Neuer Pfad\%%a\"
Durch das "echo" vor dem "xcopy" werden die Kopierbefehle (zum Testen) nur angezeigt - wenn Du es entfernst, wird wirklich kopiert, und wegen "xcopy" muss auch der Zielordner nicht vorweg angelegt werden ...

Was das Umbenennen anlangt: Du könntest eine Textdatei mit den Zuordnungen in der Form
G01 VV90T
G02 VV120T
...
anlegen und das dann (ungetestet) etwa so integrieren:
for %%i in ("D:\Alter Pfad\G0? Box*.*") do for /f "tokens=1,2*" %%a in ("%%~nxi") do (  
    findstr /ibc:"%%a " "D:\Zuordnung.txt">nul && (  
        for /f "tokens=1*" %%m in ('findstr /ibc:"%%a " "D:\Zuordnung.txt"') do echo @xcopy "%%i" "D:\Neuer Pfad\%%a\%%a %%n %%c*"  
    ) || (
        echo Keine Zuordnung fuer "%%a" gefunden - "%%i" nicht kopiert!  
    )
)
Voraussetzung: Der zu ersetzende Teil ("Box21") enthält keine Leerzeichen.
Anmerkung: Umbenannt werden so nur die kopierten Dateien.

Grüße
bastla
Member: jompsi
jompsi May 10, 2013 updated at 10:08:14 (UTC)
Goto Top
Hallo

Ich habe kurz ein kleines Batch-Script geschrieben. Ich hoffe das hilft dir face-smile

::Variabeln deklarieren
Set G01_old="G01 Box21 *.txt"  
Set G01_new="G01 VV90T *.txt"  
Set G02_old="G02 Box21 *.txt"  
Set G02_new="G02 VV120T *.txt"  
Set source="C:\Temp\Test\"  
Set dest1="C:\Temp\Test\Test1\"  
Set dest2="C:\Temp\Test\Test2\"  

::Files umbenennen
cd %source%
ren %G01_old% %G01_new%
ren %G02_old% %G02_new%

::Files kopieren
FOR %%a IN (%source%%G01_new%) DO copy "%%a" %dest1%  
FOR %%a IN (%source%%G02_new%) DO copy "%%a" %dest2%  
pause

Bei mir hat es funktioniert face-smile

Wende es aber nicht sofort produktiv an. Mach auch ein paar kleine Tests.

Freundliche Grüsse
jompsi
Member: bastla
bastla May 10, 2013 at 09:54:30 (UTC)
Goto Top
@ jompsi

Du solltest vor dem Umbenennen dafür sorgen, dass die Dateien auch sicher gefunden werden - daher entweder den Quellpfad mitgeben oder vorweg
cd /d %source%
oder
pushd %source%
verwenden ...

Grüße
bastla
Member: jompsi
jompsi May 10, 2013 at 10:11:14 (UTC)
Goto Top
Habe den Ratschlag von bastla im meinem vorherigen Beitrag hinzugefügt.

Danke.

Hatte bei mir das Skript im selben Verzeichnis wie die Testdateien.
Member: Nudl92
Nudl92 May 10, 2013 at 11:36:05 (UTC)
Goto Top
Super, vielen Dank an euch!! Vorallem für die schnelle Antwort. Aus irgendeinem Grund ging der cd Befehl nicht, mit pushd hat es aber geklappt.

Grüße Nudl92
Member: bastla
bastla May 10, 2013 at 13:40:41 (UTC)
Goto Top
Hallo Nudl92!
Aus irgendeinem Grund ging der cd Befehl nicht
Vielleicht weil ein "/d" gefehlt hat?

Grüße
bastla