2016-07-28 16 views
2

Ich fand diese Funktion auf GitHub und es funktioniert gut für das, was ich brauche, aber ich kann nicht herausfinden, wie Dateityp zu spezifizieren. Es scheint standardmäßig "alles" zu sein.VBScript BrowseForFile() -Funktion - wie Dateitypen angeben?

Function BrowseForFile() 
    With CreateObject("WScript.Shell") 
     Dim fso : Set fso = CreateObject("Scripting.FileSystemObject") 
     Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2) 
     Dim tempName : tempName = fso.GetTempName() & ".hta" 
     Dim path : path = "HKCU\Volatile Environment\MsgResp" 
     With tempFolder.CreateTextFile(tempName) 
      .Write "<input type=file name=f><script>f.click()" & _ 
      ";(new ActiveXObject('WScript.Shell'))" & _ 
      ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value)" & _ 
      ";close();<" & "/" & "script>" 
      .Close 
     End With 
     .Run tempFolder & "\" & tempName, 1, True 
     BrowseForFile = .RegRead(path) 
     .RegDelete path 
     fso.DeleteFile tempFolder & "\" & tempName 
    End With 
End Function 

‚Beispiel: msgbox BrowseForFile()

Ich habe versucht, diese Zeile ändern:

.Write "<input type=file name=f ><script>f.click()" & _ 
";(new ActiveXObject('WScript.Shell'))" & _ 
".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value)" & _ 
";close();<" & "/" & "script>" 

Um dies:

.Write "<input type=file accept=" & chr(34) & "text/plain" & chr(34) & " name=f ><script>f.click()" & _ 
";(new ActiveXObject('WScript.Shell'))" & _ 
".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value)" & _ 
";close();<" & "/" & "script>" 

Aber immer noch nicht funktioniert. Gibt es eine Möglichkeit, diese Funktion zu verwenden und die zulässigen Dateitypen anzupassen? Ich möchte nur .csv erlauben, .txt und .log

+0

Abgesehen: Was Sie versuchen, hier zu tun? VBScript kann nicht zuverlässig auf Webseiten verwendet werden (und funktioniert überhaupt nicht auf MSIE11 +), und Visual Basic als Ganzes ist auf dem Weg nach draußen. – duskwuff

+0

Ich bin mir bewusst. Ich mag hauptsächlich, wie einfach es war, IE zu manipulieren, aber ich bin mir bewusst, dass ich loslassen muss ... Was empfehlen Sie als Ersatz? – Drivium

Antwort

1

ich diese Funktion hier verwendet: How to add filter to a file chooser in batch?

Function GetFileDlgEx(sIniDir,sFilter,sTitle) 
Set oDlg = CreateObject("WScript.Shell").Exec("mshta.exe ""about:<object id=d classid=clsid:3050f4e1-98b5-11cf-bb82-00aa00bdce0b></object><script>moveTo(0,-9999);eval(new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(0).Read("&Len(sIniDir)+Len(sFilter)+Len(sTitle)+41&"));function window.onload(){var p=/[^\0]*/;new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(p.exec(d.object.openfiledlg(iniDir,null,filter,title)));close();}</script><hta:application showintaskbar=no />""") 
oDlg.StdIn.Write "var iniDir='" & sIniDir & "';var filter='" & sFilter & "';var title='" & sTitle & "';" 
GetFileDlgEx = oDlg.StdOut.ReadAll 
End Function 
set fso = CreateObject("Scripting.FileSystemObject") 
CurrentDirectory = fso.GetAbsolutePathName(".") 
sIniDir = CurrentDirectory &"\Myfile.csv" 
sFilter = "csv files (*.csv)|*.csv|txt files (*.txt)|*.txt|log files (*.log)|*.log|" 
sTitle = "Put a title of your program here :) (-_°)" 
MyFile = GetFileDlgEx(Replace(sIniDir,"\","\\"),sFilter,sTitle) 
wscript.echo MyFile 
+0

Heilige Hölle - diese Funktion ist genial. Danke dafür! Noch besser als das, was ich hatte. Viel mehr anpassbar. Prost! – Drivium

+0

Also, ich kenne die traditionelle .BrowseForFolder-Methode, aber da ich die Anpassung mit diesem Skript wie die Titelleiste und wie es das traditionelle Durchsuchen Dialogfeld mag, wie möchte ich dies ändern, um nur für ein Verzeichnis zu suchen ? Mit anderen Worten, lassen Sie jeden anderen Aspekt dieses Skripts im Takt, indem Sie einfach nach einem Verzeichnis statt einer Datei suchen. Möglich? – Drivium