kirus22
Goto Top

VBS - Mehrere Ordner auswählen

Hallo zusammen,

ich habe folgendes Problem und zwar möchte ich gerne ein VBS Skript welches mir eine Ordnerübersicht (wie im Windows Explorer; oder so ähnlich) startet. Und ich z.B. den Windows Ordner auswählen kann und div. andere Ordner wie z.B. Install, Privat, Arbeit usw.
Hintergrund ist folgender, ich schreibe gerade ein Backup Skript, nur leider fehlt mir noch die Ordnerauswahl…

Wie kann ich erstens mehrere Ordner auswählen? (Wie man das von Backup Programmen kennt... mit Häkchen setzen vor den Ordnern) Und zweitens wie erreiche ich das die Ordnerauswahl in eine Textdatei geschrieben wird?

Ich finde immer nur Skripte die mir die Ordnerauswahl starten, aber keine Textdatei schreiben und ich kann immer nur einen Ordner auswählen und nicht zwei oder drei... Vielleicht gibt es ja hier ein Skript Guru der mir weiterhelfen kann face-smile Oder den ein oder anderen Tipp für mich hat.

Für alle Antworten danke ich schon mal im Voraus!

MfG

Henning

Content-Key: 58284

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

Ausgedruckt am: 29.03.2024 um 10:03 Uhr

Mitglied: bastla
bastla 04.05.2007 um 15:45:23 Uhr
Goto Top
Hallo Kirus22!

Bis ein Guru vorbeikommt, vielleicht einmal folgendes Grundgerüst:
Const Liste = "D:\Verzeichnisliste.txt"  
Set fso = CreateObject("Scripting.FileSystemObject")  
R = MsgBox("Neue Datei " & Liste & " erstellen?", vbYesNo)  
If R = vbYes Then FileMode = 2 Else FileMode = 8
Set ListFile = fso.OpenTextFile(Liste, FileMode, True)
Do
	Set Verzeichnis = CreateObject("Shell.Application") _  
		.BrowseForFolder(0, "Datei oder Verzeichnis wählen, Abbruch beendet das Programm", 0, 17)  
	If TypeName(Verzeichnis) = "Nothing" Then  
		ListFile.Close
		WScript.Quit
	Else
		Set Basis = Verzeichnis.Self
		ListFile.WriteLine Basis.Path
	End If
Loop
Hier wird einfach in einer Endlosschleife ein Ordner-Auswahl-Dialog angezeigt und der gewählte Ordner(pfad) in die vorgegebene Textdatei geschrieben. Wenn die Ordnerauswahl abgebrochen wird, endet das Programm.

Häkchen und ähnlichen Schnickschnack hat sich MS für VB oder VBA aufgehoben ...

Grüße
bastla
Mitglied: Kirus22
Kirus22 06.05.2007 um 15:22:42 Uhr
Goto Top
Hi bastla,
erst mal besten Dank für dein Code! Hat mir sehr weitergeholfen. Jetzt möchte ich das Skript nur noch ein wenig verfeinern. Nur leider hab ich da noch ein paar Probleme. Und zwar wenn ich beim Staren des Skripts auf Nein klicke, macht das Skript einfach weiter, anstatt abzubrechen? Mein zweites (Problemface-smile) wie bekomm ich in den Msgboxen ein Titel angezeigt oder z.b. ein Rufzeichen in der Fragestellung bzw. Msgbox?

Hier mein Code:

Sub CreateAfile
    Set fs = CreateObject("Scripting.FileSystemObject")  
    Set a = fs.CreateTextFile("C:\Windows\System32\Dasi.txt", True)  
    a.Close
End Sub

Const Liste = "C:\Windows\System32\Dasi.txt"  

Set fso = CreateObject("Scripting.FileSystemObject")  
R = MsgBox("Möchten Sie eine neue Sicherungsdatei erstellen?", vbYesNo)  

If R = vbYes Then FileMode = 2 Else FileMode = 8

Set ListFile = fso.OpenTextFile(Liste, FileMode, True)

Do
    Set Verzeichnis = CreateObject("Shell.Application") _  
        .BrowseForFolder(0, "Bitte wählen Sie die Verzeichnise aus die Sie gerne Sichern möchten, Abbruch beendet das Programm", 0, 17)  
    
    If TypeName(Verzeichnis) = "Nothing" Then  
        ListFile.Close
        Set WShell = WScript.CreateObject("WScript.Shell")  
        bdata="C:\Windows\System32\"  
        WShell.Run("cmd /U /C; type " & bdata & "Dasi.txt > " & bdata & "Datensicherung.bks")  
				        MsgBox("Die Sicherungsdatei " & bdata & "Datensicherung.bks wurde erfolgreich erstellt! Sie können nun Ihre Datensicherung starten!")  
        WScript.Quit
    Else
        Set Basis = Verzeichnis.Self
        ListFile.WriteLine Basis.Path
    End If
   
Loop 

Gruß Henning

P.S Fehler oder Verbesserungen im Code?
Mitglied: bastla
bastla 06.05.2007 um 19:53:08 Uhr
Goto Top
Hallo Kirus22!

Zum Problem Nr 1: It's not a bug, it's a feature face-wink - oder, anders formuliert, es sollte nur ermöglicht werden, zwischen "Überschreiben" und "Hinzufügen zur bereits vorhandenen Liste" zu wählen. Zugegeben: Die Formulierung des MsgBox-Prompts war etwas knapp gehalten. Ein "Abbrechen" war aber gar nicht vorgesehen (ist es aber in der neuen Version).
Zur zweiten Frage zitiere ich die VBS-Hilfe (als Datei "script56de.chm" im Web zu finden):

MsgBox(Eingabeaufforderung[, Schaltflächen][, Titel][, Hilfedatei, Kontext])

Für die Schaltflächen hast Du ua folgende Möglichkeiten:
KonstanteWertBeschreibung
vbOKOnly0Nur Schaltfläche OK anzeigen.
vbOKCancel1Anzeigen der Schaltflächen OK und Abbrechen.
vbAbortRetryIgnore2Anzeigen der Schaltflächen Abbrechen, Wiederholen und Ignorieren.
vbYesNoCancel3Anzeigen der Schaltflächen Ja, Nein und Abbrechen.
vbYesNo4Anzeigen der Schaltflächen Ja und Nein.
vbRetryCancel5Anzeigen der Schaltflächen Wiederholen und Abbrechen.
Der Vollständigkeit halber ist auch der Wert angegeben, ich würde Dir aber hinsichtlich Lesbarkeit des Codes empfehlen, die benannten Konstanten vbxxx zu verwenden.

Ergänzen (einfach durch Addition der Konstanten) kannst Du die Schaltflächen durch eines der folgenden Symbole:
KonstanteWertBeschreibung
vbCritical16Anzeigen des Stopp-Symbols.
vbQuestion32Anzeigen des Fragezeichen-Symbols.
vbExclamation48Anzeigen des Symbols Warnung.
vbInformation64Anzeigen des Symbols Information.
Die Umsetzung siehst Du unten.
Zum von Dir erstellten Code (und meinen Ergänzungen):

  • Das Sub am Anfang wurde zum Einen nicht genutzt, ist aber zum Anderen auch wenig sinnvoll, da nur eine leere Datei erstellt würde. Beim Öffnen zum "Schreiben" oder auch "Anfügen" kannst Du aber ohnehin angeben, dass bei Bedarf die Datei erstellt werden soll.

  • Wenn wir nun schon einmal VBS verwenden, gibt es eigentlich keinen Grund, auf eine CMD-Shell zurückzugreifen, nur um eine Kopie der Verzeichnisliste zu erstellen (was ja de facto Deine "type"-Anweisung tut) - daher also ein einfaches "CopyFile". Die beiden Pfade (inkl Dateinamen) habe ich gleich am Anfang festgelegt - sollte es also zB Probleme mit den Schreibrechten in "C:\Windows\System32" geben (zB für einen eingeschränkten Benutzer), musst Du nicht erst lange suchen, wo der neue Pfad einzutragen wäre.

  • Da in der ersten MsgBox nun auch eine dritte Möglichkeit angeboten wird, verwende ich zur Auswertung eine "Select Case"-Struktur, da ich diese für übersichtlicher als eine "If - Then - ElseIf - End If"-Konstruktion halte.

  • Bei der zweiten MsgBox interessiert mich die Reaktion des Benutzers eigentlich gar nicht, daher setze ich die zweite "MsgBox"-Schreibweise (Achtung: ohne Klammern) praktisch als Anweisung ein, und biete auch nur einen "OK"-Button an.

  • Um eine Zeilenschaltung in einen Text einzubauen, kannst Du die Konstante vbCrLF verwenden. Durch das unten verwendete zweite vbCrLF entsteht auch noch eine Leerzeile im MsgBox-Prompt.

  • Im Gegensatz dazu kannst Du mit einer Leerstelle und folgendem "_" eine Codezeile umbrechen, wobei diese aber weiterhin als Gesamtheit betrachtet wird.

Insgesamt ergibt das folgenden Code:
Const Liste = "C:\Windows\System32\Dasi.txt"  
Const BKS = "C:\Windows\System32\Datensicherung.bks"  

Set fso = CreateObject("Scripting.FileSystemObject")  
R = MsgBox("Möchten Sie eine neue Sicherungsdatei erstellen (Ja) oder die bestehende Sicherungsdatei ergänzen (Nein)?", _  
	vbYesNoCancel + vbQuestion, "Wählen Sie ...") 'oder anstelle von vbQuestion zB vbExclamation  

Select Case R
Case vbYes
	FileMode = 2
Case vbNo
	FileMode = 8
Case Else
	WScript.Quit
End Select

Set ListFile = fso.OpenTextFile(Liste, FileMode, True)

Do
    Set Verzeichnis = CreateObject("Shell.Application") _  
        .BrowseForFolder(0, "Bitte wählen Sie die Verzeichnise aus, die Sie gerne sichern möchten, Abbruch beendet das Programm", 0, 17)  
    
    If TypeName(Verzeichnis) = "Nothing" Then  
        ListFile.Close
		fso.CopyFile Liste, BKS
		MsgBox "Die Sicherungsdatei " & BKS & " wurde erfolgreich erstellt!" & vbCrLF & vbCrLF & _  
			"Sie können nun Ihre Datensicherung starten!", vbOKOnly + vbInformation, "Fertig."  
        WScript.Quit
    Else
        Set Basis = Verzeichnis.Self
        ListFile.WriteLine Basis.Path
    End If
   
Loop

Grüße
bastla
Mitglied: Kirus22
Kirus22 26.06.2007 um 16:06:34 Uhr
Goto Top
Hallo zusammen,

wie erreiche ich den Folgendes, ich möchte gerne im Kontext Menü vom Windows Explorer den Punkt => Zum Backup hinzufügen , haben. Der Eintrag ist ja auch kein Problem face-smile nur wie erreiche ich das jetzt mit einem Skript das er mir den Pfad in eine txt Datei rein schreibt??? Ich hoffe ihr versteht wie ich das meine...

Also noch mal ne übersicht:

Rechtsklick auf eine Datei bzw. Ordner => Dann Zum Backup hinzufügen => Danach sollte der Pfad der Datei/Ordner in einer txt (bks) Datei geschrieben werden...

Danke im Voraus!

Gruß Henning
Mitglied: bastla
bastla 26.06.2007 um 16:18:34 Uhr
Goto Top
Hallo Kirus22!

... wie erreiche ich den Folgendes ...
Am ehesten mit einem neuen Beitrag (hier liest vermutlich außer uns beiden kaum jemand mit) ...

Trotzdem als Tipp (im Kontextmenü eines Ordners):
@echo "%~f1">>"C:\Windows\System32\Datensicherung.bks"  

Grüße
bastla