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 Oder den ein oder anderen Tipp für mich hat.
Für alle Antworten danke ich schon mal im Voraus!
MfG
Henning
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 Oder den ein oder anderen Tipp für mich hat.
Für alle Antworten danke ich schon mal im Voraus!
MfG
Henning
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 58284
Url: https://administrator.de/contentid/58284
Ausgedruckt am: 26.11.2024 um 16:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo Kirus22!
Bis ein Guru vorbeikommt, vielleicht einmal folgendes Grundgerüst:
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
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
Häkchen und ähnlichen Schnickschnack hat sich MS für VB oder VBA aufgehoben ...
Grüße
bastla
Hallo Kirus22!
Zum Problem Nr 1: It's not a bug, it's a feature - 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:
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:
Die Umsetzung siehst Du unten.
Zum von Dir erstellten Code (und meinen Ergänzungen):
Insgesamt ergibt das folgenden Code:
Grüße
bastla
Zum Problem Nr 1: It's not a bug, it's a feature - 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:
Konstante | Wert | Beschreibung |
vbOKOnly | 0 | Nur Schaltfläche OK anzeigen. |
vbOKCancel | 1 | Anzeigen der Schaltflächen OK und Abbrechen. |
vbAbortRetryIgnore | 2 | Anzeigen der Schaltflächen Abbrechen, Wiederholen und Ignorieren. |
vbYesNoCancel | 3 | Anzeigen der Schaltflächen Ja, Nein und Abbrechen. |
vbYesNo | 4 | Anzeigen der Schaltflächen Ja und Nein. |
vbRetryCancel | 5 | Anzeigen der Schaltflächen Wiederholen und Abbrechen. |
Ergänzen (einfach durch Addition der Konstanten) kannst Du die Schaltflächen durch eines der folgenden Symbole:
Konstante | Wert | Beschreibung |
vbCritical | 16 | Anzeigen des Stopp-Symbols. |
vbQuestion | 32 | Anzeigen des Fragezeichen-Symbols. |
vbExclamation | 48 | Anzeigen des Symbols Warnung. |
vbInformation | 64 | Anzeigen des Symbols Information. |
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