[GastForen Programmierung/Entwicklung AppleScript Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

osxuser
Beiträge gesamt: 16

23. Jul 2018, 14:01
Beitrag # 1 von 7
Bewertung:
(3932 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo liebes Forum, ich möchte mit AppleScript mehrere Ordner nach folgenden Kriterien automatisch umbenennen lassen und hoffe, ihr könnt mir dabei helfen.

Es geht um Folgendes:

Es existieren mehrere Ordner, alle sind mit jeweils 8 Zahlen benannt (z.Bsp. 13002055, 13002056, 13002057 usw.).
In all diesen Ordnern sind entweder die beiden Unterordner "dokumente" und/oder "print_pdfs" enthalten, evtl. auch nur einer von beiden (teilweise betragen diese beiden Unterordner die Zeichen %0 am Schluss). Es kann jedoch vorkommen dass noch weitere Unterordner wie "bilder", "sources" usw. enthalten sind, diese werden von der Suche ausgeschlossen.
Gesucht soll in diesen Unterordnern nach einem Dateinamen beginnend mit einem "P" und 5 anschliessenden Zahlen, die restlichen Zeichen und die Dateinamenerweiterung werden nicht benötigt (z.Bsp. P12345_dokument.indd).
Beginnend soll der Unterordner "print_pdfs" durchsucht werden, ist in diesem keine Datei mit P-Nummer enthalten oder sollte dieser Unterordner sogar fehlen dann soll als nächstes der Unterordner "dokumente" durchsucht werden. Falls in diesen beiden Ordnern keine Datei gefunden wird oder sogar beide Unterordner fehlen sollten wird die Aktion abgebrochen.
Ziel des Scripts ist, dass die ersten 6 Zeichen des gefundenen Dateinamens (z.Bsp. P12345), kopiert werden und danach den obersten Ordner "12345678", mit dieser Zeichenfolge ersetzt. Nach diesem Vorgang soll der Ordner "12345678" also neu "P12345" heissen.

Auf Wunsch kann gerne eine Ordnerstruktur geschickt werden.

Danke für eure Hilfe!
osxuser
X

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

Hans Haesler
  
Beiträge gesamt: 5826

23. Jul 2018, 15:15
Beitrag # 2 von 7
Beitrag ID: #565026
Bewertung:
(3920 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo osxuser,

eine happige Aufgabe ... Ich bin gerade unterwegs und kann erst abends versuchen, eine Lösung zu finden.

Vermutlich wird mir keiner zuvorkommen. ;-)

Gruss, Hans


als Antwort auf: [#565024]

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

Hans Haesler
  
Beiträge gesamt: 5826

25. Jul 2018, 09:00
Beitrag # 3 von 7
Beitrag ID: #565052
Bewertung:
(3874 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo osxuser,

ich konnte die Aufgabe erst heute Morgen anpacken. Hier die erste Version:

Code
(* 
OrdnerUmbenennen_01d.scpt
© 25.07.2018 / Hans Häsler, Châtelard 52, CH-1018 Lausanne
*)

# den Hauptordner wählen
activate me
set allFolders to choose folder with prompt "Die Ordner wählen" with multiple selections allowed
set nFolders to count allFolders

# eine Schleife durch die gewählten Ordner
repeat with n from 1 to nFolders
set curFolder to item n of allFolders

# eine Schleife durch die Unterordner
set newName to ""
repeat 1 times
tell application "Finder"
if exists folder "print_pdfs%0" of folder curFolder then
set docNames to name of every item of folder "print_pdfs%0" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
if exists folder "dokumente%0" of folder curFolder then
set docNames to name of every item of folder "dokumente%0" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
if exists folder "print_pdfs" of folder curFolder then
set docNames to name of every item of folder "print_pdfs" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
if exists folder "dokumente" of folder curFolder then
set docNames to name of every item of folder "dokumente" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
end tell
end repeat

if newName is not "" then
try
# den aktuellen Ordner umbenennen
tell application "Finder" to set properties of folder curFolder to {name:newName}
end try
end if
end repeat

# den Anwender informieren
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1


#///////////////////////////////////////////////////////////////////////////////////////
# der Handler, welcher versucht, den neuen Namen auszuziehen
on checkNames(docNames)
set newName to ""
set nNames to count docNames
repeat with n from 1 to nNames
set curName to item n of docNames
if curName starts with "P" then
try
set tmpNum to (text 2 thru 6 of curName) as integer
return "P" & tmpNum
end try
end if
end repeat
return newName
end checkNames

Ausführung: Das Script starten, einen (oder mehrere) Ordner wählen und auf "Wählen" klicken.

Gruss, Hans


als Antwort auf: [#565024]

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

osxuser
Beiträge gesamt: 16

25. Jul 2018, 11:35
Beitrag # 4 von 7
Beitrag ID: #565055
Bewertung:
(3863 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Hans,

wau, funktioniert auf Anhieb, vielen Dank! Könnte mir vorstellen dass dieser Script auch für andere Zwecke verwendet werden könnte :–) Frage: ist es möglich den Script noch so anzupassen dass gleich mehrere Ordner in einem Rutsch umbenannt werden könnten (alle Ordner welche umbennant werden sollen liegen im gleichen Ordner)? Liebe Grüsse, osxuser


als Antwort auf: [#565052]

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

Hans Haesler
  
Beiträge gesamt: 5826

25. Jul 2018, 12:17
Beitrag # 5 von 7
Beitrag ID: #565058
Bewertung:
(3859 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo osxuser,

bitte sehr.

Nun, das Script erlaubt eine Mehrfachauswahl (dank 'with multiple selections allowed').
Dazu ganz einfach den ersten Ordner auswählen, die Umschalttaste niederhalten, den letzten Ordner wählen: alle sind ausgewählt.

Oder die Befehlstaste benutzen, wenn gewisse Ordner nicht ausgewählt werden sollen.

Doch wenn Du vorziehst, dass nur ein Hauptordner ausgewählt werden muss, dann kann das Script entsprechend angepasst werden.

Das war übrigens der Ansatz der ersten Beta-Version. Ich werde den Code nach dem Mittagessen posten.

Gruss, Hans


als Antwort auf: [#565055]

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

osxuser
Beiträge gesamt: 16

25. Jul 2018, 13:06
Beitrag # 6 von 7
Beitrag ID: #565060
Bewertung:
(3851 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Lieber Hans,

ok, mit der Umschalttaste funktionierts,somit ist mein Anliegen umgesetzt.

Super Sache, vielen Dank für deine Hilfe!

Liebe Grüsse,
osxuser


als Antwort auf: [#565058]

Bestehenden Ordnernamen anhand eines Dateinamens aus einem Unterordner umbenennen.

Hans Haesler
  
Beiträge gesamt: 5826

25. Jul 2018, 13:38
Beitrag # 7 von 7
Beitrag ID: #565061
Bewertung:
(3847 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo osxuser,

okay, gut, dass es nun klappt. Dennoch nachstehend der angekündigte Code, mit welchem ein Hauptordner ausgewählt wird, welcher die Ordner 13002055, 13002056, 13002057 usw. enthält.

Code
(* 
OrdnerUmbenennen_02d.scpt
© 25.07.2018 / Hans Häsler, Châtelard 52, CH-1018 Lausanne
*)

# den Hauptordner wählen
set mainFolder to choose folder with prompt "Den Hauptordner wählen"

# die Unterordner ermitteln
tell application "Finder" to set allFolders to every folder of folder mainFolder
set nFolders to count allFolders

# eine Schleife durch die Unterordner
repeat with n from 1 to nFolders
set curFolder to (item n of allFolders) as string
set newName to ""

# eine Schleife durch die Unterordner des aktuellen Unterordners
repeat 1 times
tell application "Finder"
if exists folder "print_pdfs%0" of folder curFolder then
set docNames to name of every item of folder "print_pdfs%0" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
if exists folder "dokumente%0" of folder curFolder then
set docNames to name of every item of folder "dokumente%0" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
if exists folder "print_pdfs" of folder curFolder then
set docNames to name of every item of folder "print_pdfs" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
if exists folder "dokumente" of folder curFolder then
set docNames to name of every item of folder "dokumente" of folder curFolder
set newName to my checkNames(docNames)
if newName is not "" then exit repeat
end if
end tell
end repeat

if newName is not "" then
try
tell application "Finder" to set properties of folder curFolder to {name:newName}
end try
end if
end repeat

# den Anwender informieren
display dialog "Fertig." buttons "OK" default button 1 with icon 1 giving up after 1


#///////////////////////////////////////////////////////////////////////////////////////
# der Handler, welcher versucht, den neuen Namen auszuziehen
on checkNames(docNames)
set newName to ""
set nNames to count docNames
repeat with n from 1 to nNames
set curName to item n of docNames
if curName starts with "P" then
try
set tmpNum to (text 2 thru 6 of curName) as integer
return "P" & tmpNum
end try
end if
end repeat
return newName
end checkNames

Man könnte den Code mit Droplet-Befehlen ausstatten. Und/oder so erweitern, dass das Script automatisch entscheiden kann, ob der ausgewählte Ordner ein Hauptordner ist, oder ein Zielordner mit gegebenem Namen, z.B. "13002055".

Gruss, Hans


als Antwort auf: [#565060]
X