Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

VBS - Mehrere Ordner auswählen

Frage Entwicklung VB for Applications

Mitglied: Kirus22

Kirus22 (Level 1) - Jetzt verbinden

04.05.2007, aktualisiert 26.06.2007, 11623 Aufrufe, 5 Kommentare

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!

Mit freundlichen Grüßen

Henning
Mitglied: bastla
04.05.2007 um 15:45 Uhr
Hallo Kirus22!

Bis ein Guru vorbeikommt, vielleicht einmal folgendes Grundgerüst:
01.
Const Liste = "D:\Verzeichnisliste.txt" 
02.
Set fso = CreateObject("Scripting.FileSystemObject") 
03.
R = MsgBox("Neue Datei " & Liste & " erstellen?", vbYesNo) 
04.
If R = vbYes Then FileMode = 2 Else FileMode = 8 
05.
Set ListFile = fso.OpenTextFile(Liste, FileMode, True) 
06.
Do 
07.
	Set Verzeichnis = CreateObject("Shell.Application") _ 
08.
		.BrowseForFolder(0, "Datei oder Verzeichnis wählen, Abbruch beendet das Programm", 0, 17) 
09.
	If TypeName(Verzeichnis) = "Nothing" Then 
10.
		ListFile.Close 
11.
		WScript.Quit 
12.
	Else 
13.
		Set Basis = Verzeichnis.Self 
14.
		ListFile.WriteLine Basis.Path 
15.
	End If 
16.
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
Bitte warten ..
Mitglied: Kirus22
06.05.2007 um 15:22 Uhr
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 (Problem) wie bekomm ich in den Msgboxen ein Titel angezeigt oder z.b. ein Rufzeichen in der Fragestellung bzw. Msgbox?

Hier mein Code:

01.
Sub CreateAfile 
02.
    Set fs = CreateObject("Scripting.FileSystemObject") 
03.
    Set a = fs.CreateTextFile("C:\Windows\System32\Dasi.txt", True) 
04.
    a.Close 
05.
End Sub 
06.
 
07.
Const Liste = "C:\Windows\System32\Dasi.txt" 
08.
 
09.
Set fso = CreateObject("Scripting.FileSystemObject") 
10.
R = MsgBox("Möchten Sie eine neue Sicherungsdatei erstellen?", vbYesNo) 
11.
 
12.
If R = vbYes Then FileMode = 2 Else FileMode = 8 
13.
 
14.
Set ListFile = fso.OpenTextFile(Liste, FileMode, True) 
15.
 
16.
Do 
17.
    Set Verzeichnis = CreateObject("Shell.Application") _ 
18.
        .BrowseForFolder(0, "Bitte wählen Sie die Verzeichnise aus die Sie gerne Sichern möchten, Abbruch beendet das Programm", 0, 17) 
19.
     
20.
    If TypeName(Verzeichnis) = "Nothing" Then 
21.
        ListFile.Close 
22.
        Set WShell = WScript.CreateObject("WScript.Shell") 
23.
        bdata="C:\Windows\System32\" 
24.
        WShell.Run("cmd /U /C; type " & bdata & "Dasi.txt > " & bdata & "Datensicherung.bks") 
25.
				        MsgBox("Die Sicherungsdatei " & bdata & "Datensicherung.bks wurde erfolgreich erstellt! Sie können nun Ihre Datensicherung starten!") 
26.
        WScript.Quit 
27.
    Else 
28.
        Set Basis = Verzeichnis.Self 
29.
        ListFile.WriteLine Basis.Path 
30.
    End If 
31.
    
32.
Loop 
Gruß Henning

P.S Fehler oder Verbesserungen im Code?
Bitte warten ..
Mitglied: bastla
06.05.2007 um 19:53 Uhr
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:
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:
01.
Const Liste = "C:\Windows\System32\Dasi.txt" 
02.
Const BKS = "C:\Windows\System32\Datensicherung.bks" 
03.
 
04.
Set fso = CreateObject("Scripting.FileSystemObject") 
05.
R = MsgBox("Möchten Sie eine neue Sicherungsdatei erstellen (Ja) oder die bestehende Sicherungsdatei ergänzen (Nein)?", _ 
06.
	vbYesNoCancel + vbQuestion, "Wählen Sie ...") 'oder anstelle von vbQuestion zB vbExclamation 
07.
 
08.
Select Case R 
09.
Case vbYes 
10.
	FileMode = 2 
11.
Case vbNo 
12.
	FileMode = 8 
13.
Case Else 
14.
	WScript.Quit 
15.
End Select 
16.
 
17.
Set ListFile = fso.OpenTextFile(Liste, FileMode, True) 
18.
 
19.
Do 
20.
    Set Verzeichnis = CreateObject("Shell.Application") _ 
21.
        .BrowseForFolder(0, "Bitte wählen Sie die Verzeichnise aus, die Sie gerne sichern möchten, Abbruch beendet das Programm", 0, 17) 
22.
     
23.
    If TypeName(Verzeichnis) = "Nothing" Then 
24.
        ListFile.Close 
25.
		fso.CopyFile Liste, BKS 
26.
		MsgBox "Die Sicherungsdatei " & BKS & " wurde erfolgreich erstellt!" & vbCrLF & vbCrLF & _ 
27.
			"Sie können nun Ihre Datensicherung starten!", vbOKOnly + vbInformation, "Fertig." 
28.
        WScript.Quit 
29.
    Else 
30.
        Set Basis = Verzeichnis.Self 
31.
        ListFile.WriteLine Basis.Path 
32.
    End If 
33.
    
34.
Loop
Grüße
bastla
Bitte warten ..
Mitglied: Kirus22
26.06.2007 um 16:06 Uhr
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 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
Bitte warten ..
Mitglied: bastla
26.06.2007 um 16:18 Uhr
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):
01.
@echo "%~f1">>"C:\Windows\System32\Datensicherung.bks"
Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Google Android
gelöst GMail: Mehrere Ordner synchronisieren (2)

Frage von honeybee zum Thema Google Android ...

Batch & Shell
gelöst In Batchdatei mehrere Dateien auswählen (7)

Frage von Doppellhelix zum Thema Batch & Shell ...

VB for Applications
gelöst Mehrere CSV Dateien aus verschiedenen Ordner einlesen via VBA (12)

Frage von mtufangil zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (22)

Frage von patz223 zum Thema Windows Userverwaltung ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (19)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...