joni2000de
Goto Top

Pfadangabe über Windowsdialog im VBS-Script

Hallo Admins,

ich habe ein Script mit dem ich immer größere Dateimengen in unserer Ordnerstruktur zusortiere. Der Aufbau ist 1. Teil des Pfades\Objektnummer\2. Teil des Pfades. Die Objektnummer lese ich aus dem Dateinamen aus (ersten 4 Stellen). Ich hätte jetzt gerne eine Möglichkeit die Pfade der Quelle und der Ziele über eine sich öffnenden Dialog anzugeben (nicht Inputbox da ich da den genauen Pfad wissen muss).

Weiters kommt noch dazu, dass beim Zielpfad für den 2. Pfadteil, der 1. Pfadteil und die 4stellige Objektnummer noch abgezogen werden muss. Da sehe ich aber weniger das Problem.

Wie kann ich den Dialog zur Ordnerauswahl einfügen?

Danke für eure Hilfe.

Gruß Joni

Hier noch der Code

quelle = "C:\Kalkulation\"			'Pfad inkl. \  
ziel = "E:\Objekte\"				'Pfad inkl. \  
zielpfad = "\12_Abrechnung\"			'Pfadteil nach der Objektnummer - Beginn und Ende mit \						  

DD = Date
dt = Year(DD) & "-" & Right("0" & Month(DD), 2) & "-" & Right("0" & Day(DD), 2)  

ZZ = Time
zt = Left(ZZ, 2) & "-" & Mid(ZZ, 4, 2) & "-" & Right(ZZ, 2)  

logdat = "e:\log_" & dt & "_" & zt & ".txt"  

'msgbox(logdat)  

on error resume next
set fs = CreateObject("Scripting.FileSystemObject")  
set f = fs.GetFolder(quelle)
Set lf = fs.CreateTextFile(logdat, True)

For Each file in f.Files

	fn = file.Name											'alten Namen speichern  
	ONR = left(alt, 4)										'Objektnummer am Anfang des Dateinamens auslesen  

	if fs.FolderExists(ziel & ONR & zielpfad) then							'Zielverzeichnis muss vorhanden sein  
		if quelle <> ziel & ONR & zielpfad then							'Zielverzeichnis darf nicht gleich Quelle sein  
			file.move (ziel & ONR & zielpfad)						'ins Zielverzeichnis verschieben  
			lf.WriteLine(quelle & alt & " >>> " & ziel & ONR & zielpfad & fn)		'Wenn der Ordner existiert wurde die Datei verschoben + protokolliert  

		end if

	end if

Next

lf.Close												'Logdatei schließen  

Content-ID: 138998

Url: https://administrator.de/contentid/138998

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

TsukiSan
TsukiSan 23.03.2010, aktualisiert am 18.10.2012 um 18:41:28 Uhr
Goto Top
Hallo joni2000de,

mit dem Fenster zur Ordnerauswahl hatten wir hier schon einmal etwas.

Gruss
Tsuki
joni2000de
joni2000de 24.03.2010 um 09:57:00 Uhr
Goto Top
Hi Tuski,

das passt schon ganz gut. Was noch nicht ganz will ist das mit dem Voreinstellen des Startordners. Wenn ich den Code genau so übernehme wird immer "Eigene Dateien" als Startordner angezeigt. Ich habe da etwas probiert und krieg das nicht hin. Hast du mir vielleicht noch einen Tip wie die Pfadangabe für den Startordner zu erfolgen hat. Das mit dem Rootverzeichnis habe ich durchschaut, doch es änder sich da auch nichts, was für mich aber nicht problematisch ist.

Gruß Joni
TsukiSan
TsukiSan 24.03.2010 um 12:39:03 Uhr
Goto Top
Hallo joni2000de,

als Startordner kannst du einfach den Pfad angeben. In dem obigen Link und davon bastlas Script
schreibst du einfach:
StartOrdner = "C:\"  
anstelle der "17"
StartOrdner = "17"
Dann öffnet er da, wo du möchtest.

Gruss
Tsuki
bastla
bastla 24.03.2010 um 15:43:38 Uhr
Goto Top
... und wenn wir schon bei meinen "Jugendsünden" sind - für den Fall, dass der Auswahldialog abgebrochen wird, sollte auch noch vorgesorgt werden - daher etwa so:
AuswahlTitel = "Bitte Ordner auswählen"  
StartOrdner = "C:\"  
Set Auswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner)  
If TypeName(Auswahl) = "Nothing" Then  
    MsgBox "Abbruch gewählt!"  
    WScript.Quit
Else
    Set Ordner = Auswahl.Self
    WScript.Echo Ordner.Path
End If
Grüße
bastla
joni2000de
joni2000de 24.03.2010 um 17:42:26 Uhr
Goto Top
OK so weit so gut. Ich bin wieder etwas weiter, doch ganz habe ich den Syntax noch nicht durchschaut.

Kann mir hier nochmal jemand auf die Sprünge helfen.
BrowseForFolder(0,AuswahlTitel,16,StartOrdner)
0 steht für ??
AuswahlTitel ist klar
16 steht für ?? => müsste doch der Startordner sein => Zahlen werden akzeptiert Pfadangaben nicht, aber es ändert sich nichts
StartOrdner ist doch der rootordner ?? => alles was darunter liegt wird nicht angezeigt, was darüber liegt schon => das wird auch übernommen

Ich hätte gerne, dass zB in C:\temp gestartet wird aber in der Auswahl der ganze Baum des Arbeitsplatzes (oder zB ab C:\) zur Verfügung steht, so dass ich ggfl. mich auch im Baum nach unten bewegen kann.

Gruß Joni
bastla
bastla 24.03.2010, aktualisiert am 18.10.2012 um 18:41:29 Uhr
Goto Top
Hallo joni2000!

Ich nehme mal an, Du lebst in China - da ist es vermutlich gerade etwas schwieriger, (über Google) an Infos zu kommen; deshalb zwei Direkt-Links:
Shell.BrowseForFolder Method
Using the Browse For Folder Dialog Box

Damit sollte sich der Wert 16 (oder &H10) ebenso klären lassen wie die Tatsache, dass StartOrdner tatsächlich für "Root" steht ...
... so dass ich ggfl. mich auch im Baum nach unten bewegen kann.
Alternativen (zT BS-abhängig) findest Du noch in VBS - Datei auswählen ...

Grüße
bastla
joni2000de
joni2000de 25.03.2010 um 09:59:01 Uhr
Goto Top
Hi bastla,

China wäre vermutlich schon mal eine Reise wert. Mal sehen wer da den längeren Atem hat Google oder die Chinesen.

Ich war schon fleißig am lesen. Aber es hat anscheinend noch nicht gereicht face-smile
Dank deiner Links ist mir der Rest auch klar.

Was ich aber immer noch nicht gefunden habe ist eine Lösung mit der ich den Startordner vorgeben kann (frei definiert) und root auf Arbeitsplatz belassen. Das scheint nur sehr aufwändig umzusetzen zu sein.
Ich werde die Ordner ohne Vorgabe auswählen.

Nochmal danke für deine Unterstützung.

Gruß Joni
TsukiSan
TsukiSan 25.03.2010 um 13:52:26 Uhr
Goto Top
Hallo joni2000de,

gut, dass du deinen Script fertig hast.

Nur mal so am Rande:
Mal sehen wer da den längeren Atem hat Google oder die Chinesen.

Die Chinesen "atmen" schon länger chinesiche Luft, als Google Mitglieder hat face-wink

Gruss
Tsuki
Biber
Biber 25.03.2010 um 14:11:56 Uhr
Goto Top
[OT]
Moin Tsuki San,

Zitat von @TsukiSan:
Die Chinesen "atmen" schon länger chinesiche Luft, als Google Mitglieder hat face-wink
Na ja...." schon länger "muss nicht positiv sein....
Es ging doch nicht um die Frage, wer den frischeren Atem hat, oder? face-wink

Oder wer mehr heiße Luft produziert?
Oder wo gerade mehr dicke Luft ist?

na, ich höre mal lieber auf, bevor mir die Luft ausgeht...

Grüße
Biber
[/OT]
TsukiSan
TsukiSan 25.03.2010 um 14:49:52 Uhr
Goto Top
Hallo Biber,

Botschaft ist angekommen.

Aber irgendwie konnt' ich's mir nicht verkneifen. Sorry! face-wink

Gruss
Tsuki