Dateien nach Code verschieben

German support forum

Moderators: Hacker, Stefan2, white

User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Diese Dateien sollen in Ordner Verschoben werden:

123456 beliebiger Text
141166 beliebiger Text
Du meinst? :

Code: Select all

123456
141166
Okay. here we go again ("MoveFiles2SubFolder(matching)2.vbs"):

Code: Select all

If WScript.arguments.Count < 1 Then
	WScript.Echo "Parameter missing!"& VbCrLf & VbCrLf &_
		"Command   : MoveFiles2SubFolders(matching).vbs"& VbCrLf &_
		"Parameters: ""%L"" 1 -4"& VbCrLf &_
		"Tooltip   : move all marked files into matching (N characters) subfolders"& VbCrLf & VbCrLf &_
		" # first parameter: %L :Name of a list file with long file names including the complete path"& VbCrLf & VbCrLf &_
		" # second parameter (opt): 1 :start position to find matching"& VbCrLf &_
		" # third parameter (opt): 4 :number of characters to match"& VbCrLf &_
		"   negative value to supress expected messages ""Destination File exists (skipped)!"" "
	WScript.Quit 
End If

Const FOR_READING = 1
Const cNotFound = "Not Found!"
nStart = 1
nLength = 4
sFileList = WScript.arguments.Item( 0 )
bSilent = false
If WScript.arguments.Count > 1 Then
	nStart = abs( WScript.arguments.Item( 1 ) )
End If
If WScript.arguments.Count > 2 Then
	If WScript.arguments.Item( 2 ) < 0 Then bSilent = true
	nLength = abs( WScript.arguments.Item( 2 ) )
End If

Set oFSO = CreateObject( "Scripting.FileSystemObject" )

If  oFSO.FileExists(sFileList) Then

	Set oTextStream = oFSO.OpenTextFile( sFileList, FOR_READING )
	Do Until oTextStream.AtEndOfStream

		sFilePathName = oTextStream.ReadLine
		If  oFSO.FileExists( sFilePathName ) Then

			sPath = oFSO.GetParentFolderName( sFilePathName )
			sName = oFSO.GetBaseName( sFilePathName )
			sExtension = oFSO.GetExtensionName( sFilePathName )

			sPattern = Trim(Mid( sName, nStart, nLength ))
			sMatchingFolder = MatchingFolder( sPath, sPattern )

			If sMatchingFolder = cNotFound Then
				answer = MsgBox ( "No matching Destination Folder found!" &  VbCrLf & _
								sFilePathName & VbCrLf & VbCrLf & _
								"Do You want to create a new Folder?" & VbCrLf  & VbCrLf & _
								sPattern, vbYesNo + vbQuestion )
				If answer = vbYes Then
					sMatchingFolder = sPath & "\" & sPattern
					oFSO.CreateFolder( sMatchingFolder )
				End If
			End If

			If Not sMatchingFolder = cNotFound Then

				sNewFilePathName = sMatchingFolder & "\" & sName & "." & sExtension
				If Not oFSO.FileExists( sNewFilePathName ) Then
					oFSO.MoveFile  sFilePathName, sNewFilePathName
				ElseIf Not bSilent Then
					WScript.Echo "Destination File exists (skipped)!: " & VbCrLf & sNewFilePathName
				End If

			ElseIf Not bSilent Then
				WScript.Echo "No matching Destination Folder found!" & VbCrLf & sFilePathName
			End if

		End If

	Loop

	oTextStream.Close

Else

	WScript.Echo "Input file list " & sFileList & " not found."

End If

Function MatchingFolder(sPath,sPattern)

	set oFolder =  oFSO.GetFolder(sPath)
	set oSubFolders = oFolder.SubFolders

	For Each oFolder in oSubFolders 
		If oFolder.name = sPattern Then
			MatchingFolder = sPath & "\" & oFolder.Name
			Exit Function
		End If
	Next   

	MatchingFolder = cNotFound

End Function
Als Parameter für die obigen Beispieldaten

Code: Select all

"%L" 9 6
Die erste Zahl gibt die Startposition an, ab der der Zielname bestimmt wird. Die letzte Zahl wie vorher die Anzahl der Zeichen aus der der Zielname besteht.

Ich habe im Code ein paar Veränderungen vorgenommen, darum als Hinweis:
Die relevante Änderung ist die Benutzung von Mid(string,start,count) anstelle von Left(string,count)

Wie immer:
Erst an Beispieldateien testen, bevor du den Script auf wichtige Dateien loslässt.

Gruß
Holger
User avatar
Kerstin83
Senior Member
Senior Member
Posts: 341
Joined: 2007-11-25, 10:18 UTC
Location: Hannover

Post by *Kerstin83 »

nice :D :D

Deine Programme funktionieren immer auf Anhieb.

Mit dem Programm eröffnen sich ja Möglichkeiten des Dateimanagements, sagenhaft.

Bestimmt können das auch noch andere gut gebrauchen.

Vielen, vielen, vielen Dank. :D :D :D

PS:

Code: Select all

Wie immer: 
Erst an Beispieldateien testen, bevor du den Script auf wichtige Dateien loslässt. 
nur, weil mein Teddy blond ist... :D :D
Ich hasse Leute, die Sätze nicht zuende
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Kerstin83 wrote:nur, weil mein Teddy blond ist... :D :D
Bitte keine Witze über Blonde. :wink:
Ich bin weissblond auf die Welt gekommen, die längste Zeit meines Lebens war ich dann mittelblond, inzwischen näher ich mich über graublond wieder dem Ursprungszustand.

Der Hinweis war dafür gedacht, zuerst die Parameter an einem Beispiel auszuprobieren, da im Gegensatz zum "Mehrfach-Umbenenn-Tool" keine Preview des Ergebnisses erfolgt.
Wenn das MUT Verzeichnisse anlegen könnte (und sei es auch nur relative), dann wäre das eigentlich viel mächtiger als diese Workarounds mit VBS und Konsorten.

Gruß
Holger
User avatar
Kerstin83
Senior Member
Senior Member
Posts: 341
Joined: 2007-11-25, 10:18 UTC
Location: Hannover

Post by *Kerstin83 »

Hallo Holger :D :D

nach langer Zeit mal wieder dieses Thema.

Die letzte Änderung funktioniert soweit gut. Nur eine Sache: Es werden jetzt immer neue Ordner erstellt, auch wenn es einen gibt, der mit der ensprechenden Nummer beginnt. Das habe ich bisher gar nicht gemerkt, weil ich meistens neue Ordner gemacht habe.

Muss ich da etwas anderes eingeben oder liegt das am Programm? Dann wäre es sehr nett, wenn du das ändern könntest.

Liebe Grüße

Kerstin
Ich hasse Leute, die Sätze nicht zuende
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Es werden jetzt immer neue Ordner erstellt, auch wenn es einen gibt, der mit der ensprechenden Nummer beginnt.
Das musst du mir genauer erklären:
Wo werden diese Ordner erzeugt (wenn sie bereits existieren, dann können sie mit dem gleichen Namen in der gleichen Verzeichnisebene nicht neu erzeugt werden!)?
Wendest du den Script auf Suchergebnisse oder eine "Zweigansicht <Strg+B>" an?
Wie lauten die von dir benutzen Übergabeparameter für den Script?
Gib bitte einen kompletten Dateinamen(inklusive Pfad) als Beispiel an, der "fehlerhaft verschoben wird" / "einen zweiten Ordner anlegt".

Gruß
Holger
User avatar
Kerstin83
Senior Member
Senior Member
Posts: 341
Joined: 2007-11-25, 10:18 UTC
Location: Hannover

Post by *Kerstin83 »

Hallo Holger,

warst du im Urlaub?

Am besten mach ich das mit einem Beispiel:

ich habe die Fotos

9355 OrdnerA.jpg
9356 OrdnerA.jpg
9357 OrdnerA.jpg

Und im gleichen Verzeichnis liegt bereits der Ordner OrdnerA Am Strand

Dann wird durch das Skrip ein neuer Ordner OrdnerA erstellt und die Fotos da hineingeschoben und nicht in den Ordner OrdnerA Am Strand
Die Parameter sind in diesem Fall 6 7

Auf eine "Zweigansicht <Strg+B>" hab ich das beisher noch nicht angewendet.

Hoffentlich ist das verständlich.

Liebe Grüße

Kerstin
Ich hasse Leute, die Sätze nicht zuende
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Kerstin83 wrote:warst du im Urlaub?
Ja, habe aber nicht am Strand gelegen.
Und im gleichen Verzeichnis liegt bereits der Ordner OrdnerA Am Strand
Nun, da habe ich dich wohl nicht ganz richtig verstanden.
Kann man aber mit einer kleinen Modifikation erreichen.
In der Funktion "MatchingFolder" am Ende des Scripts die Zeile:

Code: Select all

      If oFolder.name = sPattern Then 
gegen:

Code: Select all

      If InStr( 1, oFolder.name, sPattern, vbTextCompare) = 1 Then
austauschen.

Bitte bedenke aber, dass, wenn ein zweiter Ordern OrdnerA Am Hafen existiert, dieser dann als Ziel ausgesucht würde, da er alphabetisch sortiert vor dem Strand liegt.

Gruß
Holger
User avatar
Kerstin83
Senior Member
Senior Member
Posts: 341
Joined: 2007-11-25, 10:18 UTC
Location: Hannover

Post by *Kerstin83 »

Lieber Holger, :D :D

warst du also Am Hafen? (nicht Am Strand)

Danke, klappt super. :D

Das Problem mit dem Ordner OrdnerA Am Hafen kommt bei mir zum Glück nicht vor, ich habe keine Bilder vom Hafen. Ne, im Ernst, danke für den Hinweis. OrdnerA sollte eindeutig sein. Ist eine 4-stellige Nummer. Allerdings, man weiß ja nie... Ausserdem, wenn ich es recht überlege, ich habe glaube ich doch Hafenfotos.


Liebe Grüße und noch einmal vielen Dank

Kerstin
Ich hasse Leute, die Sätze nicht zuende
Post Reply