okidoki
Goto Top

Datei auswählen (XP, Win7...) mittels vbs in Batch

Hallo zusammen,
das Thema wird hier heiß diskutiert und es gibt auch Lösungansätze:
VBS-BAT Datei auswählen oder hier 1.

Das Problem ist aber, dass die beiden ersten Varianten unter Windows 7 nicht mehr funktionieren.
Folgenden Code habe ich anzubieten, der in W7 geht und den den Pfad auch ausgibt. Nun möchte ich allerdings den Pfad in einer Variablen haben und benötige kein Ausgabefenster. Das bekomme ich leider nicht hin und benötige eure Hilfe! Dann ist vielleicht auch Dani und vielen anderen geholfen!
@ECHO OFF & SETLOCAL
 >%temp%\msgbox.vbs ECHO Function BrowseForFile()
>>%temp%\msgbox.vbs ECHO With CreateObject("WScript.Shell")  
>>%temp%\msgbox.vbs ECHO Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")  
>>%temp%\msgbox.vbs ECHO Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
>>%temp%\msgbox.vbs ECHO Dim tempName : tempName = fso.GetTempName() ^& ".hta"  
>>%temp%\msgbox.vbs ECHO Dim path : path = "HKCU\Volatile Environment\MsgResp"  
>>%temp%\msgbox.vbs ECHO With tempFolder.CreateTextFile(tempName)
>>%temp%\msgbox.vbs ECHO .Write "<input type=file name=f>" ^& _  
>>%temp%\msgbox.vbs ECHO "<script>f.click();(new ActiveXObject('WScript.Shell'))" ^& _  
>>%temp%\msgbox.vbs ECHO ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value);" ^& _  
>>%temp%\msgbox.vbs ECHO "close();</script>"  
>>%temp%\msgbox.vbs ECHO .Close
>>%temp%\msgbox.vbs ECHO End With
>>%temp%\msgbox.vbs ECHO .Run tempFolder ^& "\" ^& tempName, 1, True  
>>%temp%\msgbox.vbs ECHO BrowseForFile = .RegRead(path)
>>%temp%\msgbox.vbs ECHO .RegDelete path
>>%temp%\msgbox.vbs ECHO End With
>>%temp%\msgbox.vbs ECHO End Function
>>%temp%\msgbox.vbs ECHO MsgBox BrowseForFile
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "Pfad=%%~dpi" & set "Name=%%~ni" & set "Typ=%%~xi"  
del %temp%\msgbox.vbs
echo %Name%

Gruß
okidoki

Content-ID: 213372

Url: https://administrator.de/forum/datei-auswaehlen-xp-win7-mittels-vbs-in-batch-213372.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

colinardo
colinardo 05.08.2013 aktualisiert um 13:04:45 Uhr
Goto Top
Hallo okidoki,
die letzte Zeile der VBS in wscript.echo BrowseForFile ändern
>>%temp%\msgbox.vbs ECHO wscript.echo BrowseForFile
@ECHO OFF & SETLOCAL
 >%temp%\msgbox.vbs ECHO Function BrowseForFile()
>>%temp%\msgbox.vbs ECHO With CreateObject("WScript.Shell")  
>>%temp%\msgbox.vbs ECHO Dim fso : Set fso = CreateObject("Scripting.FileSystemObject")  
>>%temp%\msgbox.vbs ECHO Dim tempFolder : Set tempFolder = fso.GetSpecialFolder(2)
>>%temp%\msgbox.vbs ECHO Dim tempName : tempName = fso.GetTempName() ^& ".hta"  
>>%temp%\msgbox.vbs ECHO Dim path : path = "HKCU\Volatile Environment\MsgResp"  
>>%temp%\msgbox.vbs ECHO With tempFolder.CreateTextFile(tempName)
>>%temp%\msgbox.vbs ECHO .Write "<input type=file name=f>" ^& _  
>>%temp%\msgbox.vbs ECHO "<script>f.click();(new ActiveXObject('WScript.Shell'))" ^& _  
>>%temp%\msgbox.vbs ECHO ".RegWrite('HKCU\\Volatile Environment\\MsgResp', f.value);" ^& _  
>>%temp%\msgbox.vbs ECHO "close();</script>"  
>>%temp%\msgbox.vbs ECHO .Close
>>%temp%\msgbox.vbs ECHO End With
>>%temp%\msgbox.vbs ECHO .Run tempFolder ^& "\" ^& tempName, 1, True  
>>%temp%\msgbox.vbs ECHO BrowseForFile = .RegRead(path)
>>%temp%\msgbox.vbs ECHO .RegDelete path
>>%temp%\msgbox.vbs ECHO End With
>>%temp%\msgbox.vbs ECHO End Function
>>%temp%\msgbox.vbs ECHO wscript.echo BrowseForFile
for /f "delims=" %%i in ('cscript //nologo "%temp%\msgbox.vbs"') do set "Pfad=%%~dpi" & set "Name=%%~ni" & set "Typ=%%~xi"  
del %temp%\msgbox.vbs
echo %Name%

Grüße Uwe
OKIDOKI
OKIDOKI 05.08.2013 um 13:42:00 Uhr
Goto Top
Super Uwe, dankeschön!

Hoffentlich hilft es auch anderen.

okidoki
OKIDOKI
OKIDOKI 04.04.2015 um 10:33:23 Uhr
Goto Top
Hallo zusammen,

nachdem Uwes Lösung die letzten 2 Jahre problemlos funtioniert hat, geht nun nichts mehr ...

Es folgt das Öffnen eines Editors mit der Meldung:

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

Kann mir da jemand unter die Arme greifen?
okidoki
114757
114757 04.04.2015 aktualisiert um 10:47:50 Uhr
Goto Top
Moin,
es folgt das Öffnen eines Editors mit der Meldung:
dann ist auf deinem System die HTA Dateierweiterung nicht mehr im Originalzustand bzw. das default Verb steht auf Bearbeiten anstatt Ausführen. Setze diese auf default zurück (kannst du dir aus einem Original Windows 7 abschauen).
Dabei hilft dir das Tool extman


Gruß jodel32
OKIDOKI
OKIDOKI 04.04.2015 um 10:52:32 Uhr
Goto Top
... leider nein, steht schon auf 'open' ...
Gruß
114757
114757 04.04.2015 aktualisiert um 11:00:24 Uhr
Goto Top
Zitat von @OKIDOKI:

... leider nein, steht schon auf 'open' ...
Gruß
Dann ist das Open-Verb bzw. die Befehlszeile nicht mehr original oder dein Virenscanner blockt jetzt das Ausführen von HTAs, oder der IE ist korrupt, bzw. eher Sicherheitseinstellungen dort zu restriktiv eingestellt.
OKIDOKI
OKIDOKI 04.04.2015 um 11:00:04 Uhr
Goto Top
Danke jodel32!
Hast de eventuell eine Alternative? Ich benötige den Dialog dennoch face-smile

Gruß okidoki
colinardo
Lösung colinardo 04.04.2015, aktualisiert am 05.04.2015 um 10:57:39 Uhr
Goto Top
Zitat von @OKIDOKI:

Danke jodel32!
Hast de eventuell eine Alternative? Ich benötige den Dialog dennoch face-smile
Hallo OKIDOKI,
ich habe da eine Batch/Powershell-Kombinations-Variante für das "visuelle Auswählen" eines Pfades via FileOpen-Dialog
@echo off
for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -Command "&{[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms') | Out-Null;$dlg = New-Object System.Windows.Forms.OpenFileDialog;if($dlg.ShowDialog() -eq 'OK'){return $dlg.Filename}}"') DO set "name=%%a"  
echo %name%
Der Dialog lässt sich bei Bedarf natürlich auch noch anpassen, um z.B. die Dateifilter, initialer Pfad etc. festzulegen...

Grüße Uwe
OKIDOKI
OKIDOKI 04.04.2015 um 11:33:55 Uhr
Goto Top
Prima, danke Uwe!!!

Eine Lösung vor Ostern zu finden hätte ich nicht gedacht - ich glaube an den Hasen, bestimmt!

Grüße
okidoki