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

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

Member: bastla
Solution bastla Jun 29, 2015 updated at 14:25:10 (UTC)
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
Member: andre-xs
andre-xs Jun 29, 2015 at 07:39:26 (UTC)
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
Member: bastla
Solution bastla Jun 29, 2015 updated at 14:25:12 (UTC)
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
Member: andre-xs
andre-xs Jun 29, 2015 at 14:25:37 (UTC)
Goto Top
Super, vielen Dank. Hatte heute leider noch keine Zeit zum Testen, werde ich aber baldmöglichst machen.
viele Grüße,
Andre
Member: andre-xs
andre-xs Jun 29, 2015 updated at 19:12:03 (UTC)
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
Member: andre-xs
andre-xs Jun 29, 2015 at 19:13:42 (UTC)
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