andre-xs
Goto Top

Verzeichnisnamen zum Dateinamen per Batch hinzufügen (und kopieren)

Hallo Allerseits,
Ich habe folgende Situation:
- Eine Reihe von Verzeichnissen, z.B.
Person1
Person2
Person3
(oft 20-30 Verzeichnisse)

- In jedem Verzeichnis liegen nummerierte Dateien mit identischem Namen, z.B.
Data1.txt
Data2.txt
Data3.txt
...
(oft 20-40 Dateien pro Verzeichnis)

Nun muß ich die ganzen Dateien in ein gemeinsames Verzeichnis kopieren. Da die Dateien die gleichen Namen haben, benenne ich sie um:
Verzeichnis Person1:
Data1_Person1.txt
Data2_Person1.txt
Data3_Person1.txt
...

Verzeichnis Person2:
Data1_Person2.txt
Data2_Person2.txt
Data3_Person2.txt

Und schließlich kopiere ich alles in ein gemeinsames Verzeichnis (zB. "D:\Alle Daten")
Zur Zeit mache ich alles per Hand (nur das umbenennen per rename-tool).
Ich muß das nun zur Zeit aber sooo oft machen, daß ein Batch hierfür eine Riesenerleichterung wäre. Leider bekomme ich sowas nicht hin...

Wichtig:
Der Verzeichnisname sollte am Ende sein (also Data1_person1.txt, nicht Person1_Data1.txt)
Die Nummerierung der Dateien (Data1, Data2,...) muß vor und nach dem umbenennen identisch sein (d.h. die Nummern dürfen nicht verwürfelt werden, so daß Data1.txt auf einmal zu Data2_Person1.txt wird o.ä.)


viele Grüße,
Andre

Content-Key: 275915

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: bastla
Lösung bastla 29.06.2015 aktualisiert um 16:25:10 Uhr
Goto Top
Hallo andre-xs!

Unter der Annahme, dass es sich nur um eine Verzeichnisebene und nur um txt-Dateien handelt, (ungetestet) etwa so:
@echo off & setlocal
set "Quelle=D:\Dein Ausgangsverzeichnis"  
set "Typ=txt"  
set "Ziel=D:\Alle Daten"  

for /d %%i in ("%Quelle%\*") do for %%a in ("%%i\*.%Typ%") do copy "%%a" "%Ziel%\%%~na_%%~nxi%%~xa">nul  
Die Dateinamen im Quellverzeichnis bleiben unverändert, die Dteien werden nur im Zielverzeichnis umbenannt.

Grüße
bastla
Mitglied: andre-xs
andre-xs 29.06.2015 um 09:39:26 Uhr
Goto Top
Vielen Dank, mit meinem sehr rudimentären Verständnis sieht das gut aus.
Die Lösung, beim Kopieren umzubenennen gefällt mir auch gut.

Ein paar Dinge, die ich wahrscheinlich/evtl. selbst lösen kann:

1)
Die Dateien haben zwar alle die gleiche Endung (.nii in diesem Fall), aber es gibt noch mehr .nii Dateien, die nicht kopiert/umbenannt werden sollen. Im konkreten Fall sieht das z.B. so aus:
con_0001.nii
con_0002.nii
spmT_0001.nii
spmT_0002.nii
...
Ich würde dann ("%%i\*.%Typ%") zu ("%%i\con_*.%Typ%") ändern.
Frage: Muß ich dann auch was am copy-Befehl ändern?

2)
Es sind 2 Ebenen, aber immer die gleiche Unter-Ebene, also
Person1\Results
Person2\Results
...
Ich würde ("%Quelle%\*") zu ("%Quelle%\Results\*") ändern.

3) Es gibt noch mehr Verzeichnisse in "Quelle=D:\Dein Ausgangsverzeichnis", also nicht nur Person1, Person2, sondern auch noch sowas wie "Gesamtdaten", "Andere Analysen", etc. Da aber dort keine passenden Daten drinliegen (bzw. auch gar kein Unterverzeichnis Results), würde wahrscheinlich einfach nichts kopiert werden, oder?

Werde ich heute im Laufe des Tages mal ausprobieren, vielen Dank auf jeden Fall schonmal!
Grüße,
Andre
Mitglied: bastla
Lösung bastla 29.06.2015 aktualisiert um 16:25:12 Uhr
Goto Top
Hallo andre-xs!

1) Kopierbefehl könnte bleiben (es wird immer der komplette Dateiname - also ohne Typ - verwendet).

2) + 3) Kann mit for /d nicht klappen, da so ja nach Unterordnern von "%Quelle%\Results" gesucht würde - daher eher:
for /d %%i in ("%Quelle%\*") do for %%a in ("%%i\Results\con_*.%Typ%") do copy "%%a" "%Ziel%\%%~na_%%~nxi%%~xa">nul
- es geht ja um die Ebene zwischen "%Quelle%" und "Results", daher muss diese mit %%i erfasst werden.

Grüße
bastla
Mitglied: andre-xs
andre-xs 29.06.2015 um 16:25:37 Uhr
Goto Top
Super, vielen Dank. Hatte heute leider noch keine Zeit zum Testen, werde ich aber baldmöglichst machen.
viele Grüße,
Andre
Mitglied: andre-xs
andre-xs 29.06.2015 aktualisiert um 21:12:03 Uhr
Goto Top
EDIT: Das unten ist falsch, mein Fehler, siehe nächster Post

Hallo bastla,
leider funktioniert es noch nicht richtig, es werden nur die Dateien aus dem ersten Verzeichnis kopiert. Kann es sein, daß das Schachteln der zwei "for" Schleifen Probleme macht?

Wenn ich die ursprüngliche Kopier-Zeile so ändere:
for /d %%i in ("%Quelle%\*") do echo %%i
werden alle Verzeichnisse ausgegeben.

Wenn ich es so ändere:
for /d %%i in ("%Quelle%\*") do for %%a in ("%%i\Results\con_*.%Typ%") do echo %%i
Wird nur noch das erste Verzeichnis ausgegeben (natürlich so oft, wie es passende Dateien in dem Verzeichnis gibt).

Hast Du irgendeine Idee woran es liegen könnte?

vielen Dank,
Andre
Mitglied: andre-xs
andre-xs 29.06.2015 um 21:13:42 Uhr
Goto Top
Sorry, mein Fehler, es funktioniert jetzt perfekt.

Mein Fehler war, daß nur im ersten Verzeichnis das Unterverzeichnis "Result" hieß, in allen andere "Results_1stLevel" - daher hat er dort keine Dateien gefunden.

Habs jetzt im ersten Verzeichnis umbenannt, so daß alle Results_1stLevel heißen und die Batch angepaßt.

Vielen Dank, Du hast mir sehr viel Arbeit erspart!

viele Grüße,
Andre