Dateinamen in txt Datei reinschreiben?

K

Kollar

Aktives Mitglied
Thread Starter
Dabei seit
03.02.2004
Beiträge
1.581
Reaktionspunkte
0
Hallo, vielleicht kann mit ein erfahrener Benutzer helfen, im Automator bin ich nicht weit gekommen.

Ich benötige XML- Dateien, die bestimmte Dateinamen enthalten.
Im Prinzip möchte ich so vorgehen:

Ich markiere X Dateien, starte ein Script und am Ende soll eine txt Datei erstellt werden, die diese Dateinamen mit anderem Text kombiniert, z.B.

<Das ist eine Datei: #Dateiname1# die ich erstellt habe>
<Das ist eine Datei: #Dateiname2# die ich erstellt habe>
..

Die Reihenfolge ist erstmal egal. Vielleicht könnte man das noch ein wenig ausbauen, dass er "erkennt" um welchen Dateitypen es sich handelt, die Unterscheidung würde sich auf mp2 und jpg beschränken, also z.B.:

Ich markiere 7 Dateien (6 JPG eine ist mp2):

<Hier ist der Anfang>
<Das ist Musik: #Dateiname# die ich erstellt habe>
<Das ist ein Bild: #Dateiname1# die ich erstellt habe>
<Das ist ein Bild: #Dateiname2# die ich erstellt habe>
<Das ist ein Bild: #Dateiname3# die ich erstellt habe>
<Das ist ein Bild: #Dateiname4# die ich erstellt habe>
<Das ist ein Bild: #Dateiname5# die ich erstellt habe>
<Das ist ein Bild: #Dateiname6# die ich erstellt habe>
<Hier ist das Ende>

Alles ausser den #DateinameX# würde ich vorgeben.

Ist so etwas möglich, kann das jemand von Euch vergütet machen?
Danke im Voraus :)
 
hm also mit php wäre das kein problem..

dateien markieren, CTRL&C in Textdatei CTRL&V und danach für jede Zeile den Text drumherum legen...

brauchst du die xml-datei auf einem server oder lokal?

wenn für den server, könnte ich dir es so machen:

du kopierst die dateinamen in ein txt-file (entweder von hand oder mit automator) und lädst es hoch (geht glaub ich auch mit automator?)

danach übernimmt ein php-script den rest...
 
Vielleicht mal anders rum:
Du erstellst zuerst ein Script, das Deine wiederkehrenden Antworten als Text enthält.
Während des Scriptlaufs stoppt das Script jedes Mal an der Stelle, an der der Dateiname eingefügt werden soll und gibt Dir die Möglichkeit, im Finder die Datei anzuklicken. Darauf wird der Dateiname kopiert und in den Textteil des Scripts eingefügt.
Habe ich natürlich eben nicht ausprobiert. Vielleicht ist es so herum für Dich leichter.
 
Ciao Kollar,

zum Einstieg müßte diese Beispiel funktionieren:
PHP:
property header : "<Hier ist der Anfang>"
property footer : "<Hier ist das Ende>"
property musicStart : "<Das ist Musik: #"
property pictureStart : "<Das ist ein Bild: #"
property otherStart : "<Das ist irgendein File: #"
property lineEnd : "# und ist von mir erstellt worden.>"
property xmlBody : ""

tell application "Finder"
	set s to selection
	repeat with aFile in s
		set n to name of aFile
		set k to kind of aFile
		if k = "JPEG Document" or k = "TIFF Document" then
			set xmlBody to (xmlBody & return & pictureStart & n & lineEnd)
		else if k = "MP3 Audio File" then
			set xmlBody to (xmlBody & return & musicStart & n & lineEnd)
		else
			set xmlBody to (xmlBody & return & otherStart & n & lineEnd)
		end if
	end repeat
end tell

set completeText to header & xmlBody & return & footer
Für den Feinschliff mu
 
Ciao Kollar,

zum Einstieg müßte diese Beispiel funktionieren:
PHP:
property header : "<Hier ist der Anfang>"
property footer : "<Hier ist das Ende>"
property musicStart : "<Das ist Musik: #"
property pictureStart : "<Das ist ein Bild: #"
property otherStart : "<Das ist irgendein File: #"
property lineEnd : "# und ist von mir erstellt worden.>"
property xmlBody : ""

tell application "Finder"
	set s to selection
	repeat with aFile in s
		set n to name of aFile
		set k to kind of aFile
		if k = "JPEG Document" or k = "TIFF Document" then
			set xmlBody to (xmlBody & return & pictureStart & n & lineEnd)
		else if k = "MP3 Audio File" then
			set xmlBody to (xmlBody & return & musicStart & n & lineEnd)
		else
			set xmlBody to (xmlBody & return & otherStart & n & lineEnd)
		end if
	end repeat
end tell

set completeText to header & xmlBody & return & footer
Für den Feinschliff mu
 
Ciao Kollar,

zum Einstieg müßte diese Beispiel funktionieren:
PHP:
property header : "<Hier ist der Anfang>"
property footer : "<Hier ist das Ende>"
property musicStart : "<Das ist Musik: #"
property pictureStart : "<Das ist ein Bild: #"
property otherStart : "<Das ist irgendein File: #"
property lineEnd : "# und ist von mir erstellt worden.>"
property xmlBody : ""

tell application "Finder"
	set s to selection
	repeat with aFile in s
		set n to name of aFile
		set k to kind of aFile
		if k = "JPEG Document" or k = "TIFF Document" then
			set xmlBody to (xmlBody & return & pictureStart & n & lineEnd)
		else if k = "MP3 Audio File" then
			set xmlBody to (xmlBody & return & musicStart & n & lineEnd)
		else
			set xmlBody to (xmlBody & return & otherStart & n & lineEnd)
		end if
	end repeat
end tell

set completeText to header & xmlBody & return & footer
Für den Feinschliff mußt Du dann noch mal fragen. :)

Frohes scripten
Farid
 
OMG, 1000thx, ich teste das alles mal, und melde mich dann natürlich wieder :) Mega Danke erstmal an Alle, ich liebe dieses Forum :)
 
schon mal eine anwort: das script ist nicht für einen server gedacht :), und ich wollte nichts "manuell" machen, ausser die Dateinamen markieren im Finder, also jeden einzelnen Namen markieren und c+v wäre zuviel des guten, dann könnet ich im prinzip alles im code manuell machen.

ok, ich teste mal :)=
 
soo, bin relativ weit gekommen, danke nochmal an alle, chedfarid you got Mail :D
 
Ja Danke, bei mir das das leider noch ein wenig komplexer geworden, da ich immer das mp2 und ein jpg zusammenfassen muss.

Danke nochmal :)
 
hmm, wie kann ich denn Anführungszeichen ausgeben, ohne dass AppleScript dies als Ende versteht? Wenn ich \" einsetze, bekomme ich auch \" in der Ausgabe und nicht nur ".
 
noch eine viel wichtigere Frage, angenommen ich schaffe es das Anführungszeichen- Problem mal zu lösen... wie bekomme ich denn das "Ergebnis", dass mir das Apple- Script- Programm erstellt denn in eine Datei? Geht das nur per Copy und Paste?

Ich habe probiert mit Automator eine Reihe zu erstellen. Zuerst würde das Script ausgeführt, dann eine neue Textdatei erstellt. Aber in der Textdatei steht nur Datenmüll, nicht das Ergebnis wie es im "Ergebnis- Screen" des AS- Apps dargestellt wird.

Ich habe mir einen Workflow gedacht über den Automator:

1. 7 Files markieren im Finder
2. Script über Finder/ Plugin starten oder Scriptmenü

hier das Script wie es jetzt ist (ich versuche noch das Problem mit den Anführungszeichen zu lösen, aber mal angenommen es geht nciht)

Code:
property footer : "</frames>"
property opener : "<frame duration=#10#>"
property duration : " duration=#60#"
property ends : "</frame>"
property musicStart : "<sound src="
property pictureStart : "<image src=#"
property lineEnd : "# />"
property lineEnd2 : " />"
property xmlBody : "<?xml version=#1.0# encoding=#utf-8#?>
<frames schemaid=#image-sound#>"

tell application "Finder"
	set s to selection
	repeat with aFile in s
		set n to name of aFile
		set k to kind of aFile
		if k = "MPEG-Film" then
			set xmlBody to (xmlBody & return & opener & musicStart & n & duration & lineEnd2)
		end if
	end repeat
	set counter to "0"
	repeat with aFile in s
		set n to name of aFile
		set k to kind of aFile
		
		if k = "JPEG-Bild" and counter = "0" then
			set xmlBody to (xmlBody & return & pictureStart & n & lineEnd & ends)
			set counter to "1"
		else if k = "JPEG-Bild" and counter = "1" then
			set xmlBody to (xmlBody & return & opener & pictureStart & n & lineEnd & ends)
		end if
	end repeat
	set counter to "0"
end tell

set completeText to xmlBody & return

Im Ergebnis- Fenster sehe ich dann:

Code:
"<?xml version=#1.0# encoding=#utf-8#?>
<frames schemaid=#image-sound#>
<frame duration=#10#><sound src=sounddatei.mp2 duration=#60# />
<image src=#diashow6.jpg# /></frame>
<frame duration=#10#><image src=#diashow5.jpg# /></frame>
<frame duration=#10#><image src=#diashow3.jpg# /></frame>
<frame duration=#10#><image src=#diashow1.jpg# /></frame>
<frame duration=#10#><image src=#diashow4.jpg# /></frame>
<frame duration=#10#><image src=#diashow2.jpg# /></frame>
"

3. Das Ergebnis sollte ich eine Datei gespeichert werden (mit Dateinamenabfrage über Automator), z.B. "show1.txt"

Wenn ich mit allen Foldern fertig bin, habe ich dann z.B. 10 Dateien, "show1.txt" bis "show10.txt"..

4. Durch den Automator könnte ich den Inhalt dann in eine Textdatei zusammen fassen, müsste jetzt aber die # durch " ersetzen... und dann auf speichern klicken :D

Meine Probleme bei der Lösung:

1. Wie kann ich das Ergebnis in eine Datei umwandeln? Also ich markiere 7 Dateien, das Script fragt mit einem Prompt nach den Dateinamen, ich gebe diesen ein, und auf dem Desktop wird die Datei "DATEINAME1.txt" erstellt..

2. Ich habe kein "suchen und ersetzen" im Automator gefunden -.-

3. Die Anführungszeichen ganz am Anfang und am Ende müssten auch weg.

:)
 
Zuletzt bearbeitet:
Ciao Kollar,
sehe hier und in Deinen beiden Messages, daß Du gewaltig weitergekommen bist - Bravo ! :)

Sofern Dich noch die Frage interessiert, wie Du einen Ordner voller jpg.- und .mp2-Dateien für Dein Skript vorbereiten kannst, hier ein Vorschlag:
PHP:
-- hier Deine properties für die Estellung des XML-Files:
-- property header : "<?xml version=\"1.0\" encoding=\"utf-8\"?>" & return & "<frames schemaid=\"image-sound\">"
-- (...)
-- property xmlBody : ""

property subFolders : {}
property otid : text item delimiters

set text item delimiters to "."

tell application "Finder"
	set myFolder to "Macintosh HD:Users:farid:Desktop:test:" as alias
	set theFiles to every item of myFolder
end tell

my createSubFolders(theFiles, myFolder)
my writeXMLfile(myFolder)

on createSubFolders(theFiles, myFolder)
	tell application "Finder"
		repeat with aFile in theFiles
			if kind of aFile is "MP2 Audio File" then
				set n to name of aFile
				set nameParts to text items of n
				set nameNewFolder to item 1 of nameParts
				set end of subFolders to nameNewFolder
				make new folder at myFolder with properties {name:nameNewFolder}
			end if
		end repeat
	end tell
	
	set text item delimiters to otid
	
	tell application "Finder"
		repeat with aSubFolder in subFolders
			set subName to aSubFolder as string
			set stringLength to (count of subName)
			repeat with aFile in theFiles
				if kind of aFile is not "Folder" then
					set n to name of aFile
					set n to (characters 1 thru stringLength of n) as string
					if n = subName then
						set aFile to aFile as alias
						move aFile to folder aSubFolder of myFolder
					end if
				end if
			end repeat
			set theFiles to every item of myFolder
		end repeat
	end tell
end createSubFolders

on writeXMLfile(myFolder)
	tell application "Finder"
		set theFolders to every item of myFolder
		repeat with aFolder in theFolders
			set folderName to name of aFolder
			set myFiles to every item of aFolder
			repeat with aFile in myFiles
				-- hier Dein XML-Skript einkopieren
			end repeat
		end repeat
	end tell
	set completeText to header & xmlBody & return & footer
	return completeText
end writeXMLfile
Sofern Du Deinen XML-File direkt via AppleScript schreiben lassen willst, wirf mal einen Blick in das Dictionary der Standard-Additions: unter file open for access und file read/write solltest Du alles finden was Du brauchst. (Es gibt auch eine Menge Beispiele in diesem Forum)

Good scripting
Farid
 
normalerweise werden anführungszeichen mit einem \*als nicht zum code gehörend gekennzeichnet... ich weiss nicht, ob das in applescript auch so klappt?

also:

Code:
property footer : "</frames>"
property opener : "<frame duration=\"10\">"
property duration : " duration=\"60\""
property ends : "</frame>"
property musicStart : "<sound src="
property pictureStart : "<image src=\""
property lineEnd : "\" />"
property lineEnd2 : " />"
property xmlBody : "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<frames schemaid=\"image-sound\">"
 
wow danke dir chedfarid :) ich gucke da morgen mal rein ob das funktioniert :) macht auf jeden fall spaß mit Euch.

Ich habe es mit /" probiert bei den Anführungszeichen, aber das hat nicht hingehauen. Im moment habe ich nur folgende Lösung:

Aus dem o.g. Applescript habe ich mit Automator ein Finder PlugIn gebaut. Ich muss also die sieben zusammengehörenden Dateien markieren, und die Action erstellt dann eine "datei.txt", danach markiere ich weitere sieben Dateien, starte wieder die Action unb bekomme wieder eine "datei1.txt" usw.

Wenn ich fertig bin, markiere ich all diese "dateiX.txt" und jage da eine weitere action drüber, die fügt die texte zusammen und macht davor und danach noch zwei zeilen rein.

Dafür musste ich allerdings das oben angegebene Action- Set benutzen, weil es mit dem herkömmlichen Textedit Funktionen aus OSX nicht lief.

Aber jetzt mal gucken,was chebfarid da schönes gebaut hat oO :)
 
hmm, so ich habe jetzt einfach auf meinem Schreibtisch ein Folder "test" gemacht, und dort drei Serien reinkopiert, ausserdem das o.g. Script angepasst mit meinen Properties, also so sieht es aus, nun:

Code:
property footer : "</frames>"
property opener : "<frame duration=#10#>"
property duration : " duration=#60#"
property ends : "</frame>"
property musicStart : "<sound src="
property pictureStart : "<image src=#"
property lineEnd : "# />"
property lineEnd2 : " />"
property header : "<?xml version=#1.0# encoding=#utf-8#?>" & return & "<frames schemaid=#image-sound#>"
property xmlBody : ""

property subFolders : {}
property otid : text item delimiters

set text item delimiters to "."

tell application "Finder"
	set myFolder to "video1system:Users:jkollar:Desktop:test" as alias
	set theFiles to every item of myFolder
end tell

my createSubFolders(theFiles, myFolder)
my writeXMLfile(myFolder)

on createSubFolders(theFiles, myFolder)
	tell application "Finder"
		repeat with aFile in theFiles
			if kind of aFile is "MP2 Audio File" then
				set n to name of aFile
				set nameParts to text items of n
				set nameNewFolder to item 1 of nameParts
				set end of subFolders to nameNewFolder
				make new folder at myFolder with properties {name:nameNewFolder}
			end if
		end repeat
	end tell
	
	set text item delimiters to otid
	
	tell application "Finder"
		repeat with aSubFolder in subFolders
			set subName to aSubFolder as string
			set stringLength to (count of subName)
			repeat with aFile in theFiles
				if kind of aFile is not "Folder" then
					set n to name of aFile
					set n to (characters 1 thru stringLength of n) as string
					if n = subName then
						set aFile to aFile as alias
						move aFile to folder aSubFolder of myFolder
					end if
				end if
			end repeat
			set theFiles to every item of myFolder
		end repeat
	end tell
end createSubFolders

on writeXMLfile(myFolder)
	tell application "Finder"
		set theFolders to every item of myFolder
		repeat with aFolder in theFolders
			set folderName to name of aFolder
			set myFiles to every item of aFolder
			repeat with aFile in myFiles
				-- hier Dein XML-Skript einkopieren 
			end repeat
		end repeat
	end tell
	set completeText to header & xmlBody & return & footer
	return completeText
end writeXMLfile

also Ausgabe bekomme ich im Script nur:

Code:
"<?xml version=#1.0# encoding=#utf-8#?>
<frames schemaid=#image-sound#>
</frames>"

muss ich noch etwas ändern?
 
Kollar schrieb:
on writeXMLfile(myFolder)
tell application "Finder"
set theFolders to every item of myFolder
repeat with aFolder in theFolders
set folderName to name of aFolder
set myFiles to every item of aFolder
repeat with aFile in myFiles
-- hier Dein XML-Skript einkopieren
end repeat
end repeat
end tell
set completeText to header & xmlBody & return & footer
return completeText
end writeXMLfile

Ciao,
Du mu
 
Kollar schrieb:
on writeXMLfile(myFolder)
tell application "Finder"
set theFolders to every item of myFolder
repeat with aFolder in theFolders
set folderName to name of aFolder
set myFiles to every item of aFolder
repeat with aFile in myFiles
-- hier Dein XML-Skript einkopieren
end repeat
end repeat
end tell
set completeText to header & xmlBody & return & footer
return completeText
end writeXMLfile

Ciao,
Du mußt natürlich die Zeile
-- hier Dein XML-Skript einkopieren
mit Deinem Code ersetzen. ;)

Good scripting
Farid
 
Zurück
Oben Unten