basebubble
Goto Top

Batch: Dateien ohne Artikel kopieren

Hallo in die Runde!

Zwar suche ich jetzt schon eine ganze Weile und habe auch schon (erfolglos) einen Kollegen mit ins Boot geholt aber für mein folgendes Problem habe ich noch keine Lösung gefunden. (Obwohl es bestimmt gar nicht so schwer ist... aber vielleicht suche ich auch einfach falsch)

Ich habe einen Ordner mit einem Haufen Text-Dateien. Die Dateien sollen in bereits vorhandene Ordner (A-Z und 1-0) alphabetisch einsortiert werden. Ich habe schon die folgende Batch, die grundsätzlich funktioniert:
1
2
3
4
set "VARBuchstaben=A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0"  
for %%a in (%VARBuchstaben%) do (
copy %%a*.txt D:\Temp\%%a\%%a*.txt
)

So weit so gut so einfach... Und jetzt das Problem. Es gibt in dem Ordner auch einige Dateien mit vorangestellten Artikeln (z. B. "Der Kratzbaum.txt"), die mit dieser Methode ebenfalls unter dem ersten Buchstaben des Dateinamens abgelegt werden. Stattdessen sollte der Artikel ignoriert und die Datei unter "K" abgelegt werden. Und da verlassen mich meine (spärlichen) Fähigkeiten...
Ich könnte dem o. g. Code noch eine andere Verteilung mit einer Variable für die Artikel (Der Die Das) voranstellen nur da weiß ich auch nicht wie ich an den korrekten Ausgabeordner komme.

Ich hoffe, mir kann jemand von Euch helfen.
Schönen Abend!
B.

Content-ID: 1733251854

Url: https://administrator.de/forum/batch-dateien-ohne-artikel-kopieren-1733251854.html

Ausgedruckt am: 04.04.2025 um 22:04 Uhr

rubberman
rubberman 17.01.2022 um 21:13:17 Uhr
Goto Top
Ungetestet:
Schmeiß mal statt nur einer, diese 3 Zeilen in den Rumpf deiner Schleife.
1
2
3
copy "Der %%a*.txt" "D:\Temp\%%a\Der %%a*.txt"  
copy "Die %%a*.txt" "D:\Temp\%%a\Die %%a*.txt"  
copy "Das %%a*.txt" "D:\Temp\%%a\Das %%a*.txt"  
... um erst mal alle Dateien mit Artikel zu erwischen. Und dann eine weitere Schleife mit deiner ursprünglichen Zeile im Rumpf.
1
copy "%%a*.txt" "D:\Temp\%%a\%%a*.txt"  

Steffen
BaseBubble
BaseBubble 18.01.2022 um 10:31:10 Uhr
Goto Top
Hallo!

Danke für die schnelle Antwort... So funktioniert es allerdings nicht, da die Batch jetzt allen gefundenen Dateien mit vorangestelltem Artikel einfach noch einen Artikel voranstellt und der copy-Befehl keine Dateien findet.

Es müsste eine Möglichkeit geben, von den gefundenen Dateien mit Artikel das fünfte Zeichen des Dateinamens als Variable zu übernehmen und die Datei dann in den der Variable entsprechenden Ordner zu verteilen. Aber die kenne ich leider nicht.

Grüße
Boris
rubberman
rubberman 18.01.2022 um 13:13:12 Uhr
Goto Top
Dann schneide den Dateiname im Ziel ab und nutze nur das Zielverzeichnis mit nachgestelltem Backslash.
1
copy "Der %%a*.txt" "D:\Temp\%%a\"  

Steffen
TK1987
TK1987 18.01.2022 um 13:23:19 Uhr
Goto Top
Moin,

lass das Batch-rumgemurkse und nimm Powershell, damit ist das Ganze ein klacks.
1
2
3
4
5
6
7
8
9
10
11
12
13
# Quellpfad
$Source = 'D:\Temp'  

# Ordner von A-Z erstellen
Foreach ($Letter in [char[]](65..90)) {[void](mkdir "$Source\$Letter" -Force)}  

# Dateien auflisten und nach Anfangsbuchstaben gruppieren, Artikel ignorieren
$Groups = Get-ChildItem -File "$Source\*.txt" | Group-Object { ($_.Name -replace '^(der|die|das) ') }  

# Jede Gruppe in den entsprechenden Ordner schieben
Foreach ($Group in $Groups) {
  Move-Item -Path $Group.Group.Fullname -Destination "$Source\$($Group.Name)\"  
}

Gruß Thomas