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!
Gruß
okidoki
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 213372
Url: https://administrator.de/contentid/213372
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo okidoki,
die letzte Zeile der VBS in
Grüße Uwe
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
Moin,
Dabei hilft dir das Tool extman
Gruß jodel32
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
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.
Zitat von @OKIDOKI:
Danke jodel32!
Hast de eventuell eine Alternative? Ich benötige den Dialog dennoch
Hallo OKIDOKI,Danke jodel32!
Hast de eventuell eine Alternative? Ich benötige den Dialog dennoch
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%
Grüße Uwe