okidoki
Goto Top

VBS-BAT Datei auswählen

Guten Abend,

Ich möchte gerne eine Datei auswählen und die Variable nach batch übergeben.
Ja, ich habe folgenden Beitrag gelesen: VBS - Datei auswählen

Allerdings habe ich Probleme, die Variable auszulesen (in batch) und in bat zu übergeben. Hier mein Code (abgeändert nach Dani):

@ECHO OFF & SETLOCAL
>%temp%\msgbox.vbs ECHO 'Datei auswählen  
>>%temp%\msgbox.vbs ECHO Set objOpenDialog = CreateObject("SAFRCFileDlg.FileOpen")  
>>%temp%\msgbox.vbs ECHO intReturn = objOpenDialog.OpenFileOpenDlg

>>%temp%\msgbox.vbs ECHO If intReturn Then
>>%temp%\msgbox.vbs ECHO     strFilePath = objOpenDialog.FileName
>>%temp%\msgbox.vbs ECHO Else
>>%temp%\msgbox.vbs ECHO 	MsgBox("Keine Datei ausgewählt!")  
>>%temp%\msgbox.vbs ECHO     Wscript.Quit
>>%temp%\msgbox.vbs ECHO End If


set "Eingabe="  
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "Eingabe=%%i"  

echo %Eingabe%
del "%temp%\msgbox.vbs"   
pause

PS: Vielleicht kann jemand mir noch einmal kurz die Variablenübergabe plausibel machen, für die Nachwelt face-wink
Danke OKIDOKI

Content-ID: 181830

Url: https://administrator.de/contentid/181830

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

bastla
bastla 12.03.2012 um 22:07:21 Uhr
Goto Top
Hallo OKIDOKI!

Das hatten wir doch heute schon mal ...

Beim Batch kommt das an, was im VBScript per "WScript.Echo" ausgegeben wird - also mach aus Zeile 7
>>%temp%\msgbox.vbs ECHO     WScript.Echo objOpenDialog.FileName
Ansonsten wäre auch ein "if defined Eingabe" noch sinnvoll ...

Grüße
bastla
OKIDOKI
OKIDOKI 13.03.2012 um 12:31:44 Uhr
Goto Top
Hallo bastla,

ja super, danke! "if defined Eingabe" ist natürlich sinnvoll, ansonsten folgt ja schon der nächste Abbruch ... face-wink
Wenn ich das so mach, wie du dagst, kann ich dochh die Zeilen 8+9 ebenfalls rausnehmen.

Allerdings, davon aber unabhängig, wird noch die Meldung "Echo ist ausgeschaltet (Off)" angezeigt. Was fehlt nun noch?

@ECHO OFF & SETLOCAL
>%temp%\msgbox.vbs ECHO 'Datei auswählen  
>>%temp%\msgbox.vbs ECHO Set objOpenDialog = CreateObject("SAFRCFileDlg.FileOpen")  
>>%temp%\msgbox.vbs ECHO intReturn = objOpenDialog.OpenFileOpenDlg

>>%temp%\msgbox.vbs ECHO If intReturn Then
>>%temp%\msgbox.vbs ECHO     WScript.Echo objOpenDialog.FileName
>>%temp%\msgbox.vbs ECHO     Wscript.Quit
>>%temp%\msgbox.vbs ECHO End If

set "Eingabe="  
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "Eingabe=%%i"  
del "%temp%\msgbox.vbs"  

if defined Eingabe (GOTO weiter) else (GOTO :n-weiter)

:weiter
echo weiter
pause
exit

:n-weiter
echo n-weiter
pause
exit

Danke, OKIDOKI
bastla
bastla 13.03.2012 um 12:52:45 Uhr
Goto Top
Hallo OKIDOKI!
Allerdings, davon aber unabhängig, wird noch die Meldung "Echo ist ausgeschaltet (Off)" angezeigt.
Es zwingt Dich ja keiner, mit "echo off" zu testen - daher "echo on" verwenden und schauen, wo der Fehler auftritt ...
Was fehlt nun noch?
ZB \ oder . oder ( oder oder oder ... (aber vermutlich ist eher etwas zuviel) ...
Wenn Du schon Scriptzeilen sparen willst, kannst Du die Zeilen 6 bis 9 durch
>>%temp%\msgbox.vbs ECHO If intReturn Then WScript.Echo objOpenDialog.FileName
ersetzen.

Grüße
bastla
OKIDOKI
OKIDOKI 13.03.2012 um 13:14:45 Uhr
Goto Top
Hallo bastla,

funktioniert nun prima!

Der Vollständigkeit halber (und weil es oft in diesem Zusammenhang in verschiedenen Threads auftaucht), was wäre nötig, um mit dieser Prozedur einen Ordner anstatt einer Datei zu wählen? (Im Sinne von "objShell.BrowseForFolder", aber wie?)

@ECHO OFF & SETLOCAL
>%temp%\msgbox.vbs ECHO 'Datei auswählen  
>>%temp%\msgbox.vbs ECHO Set objOpenDialog = CreateObject("SAFRCFileDlg.FileOpen")  
>>%temp%\msgbox.vbs ECHO intReturn = objOpenDialog.OpenFileOpenDlg

>>%temp%\msgbox.vbs ECHO If intReturn Then WScript.Echo objOpenDialog.FileName

set "Eingabe="  
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "Eingabe=%%i"  

del "%temp%\msgbox.vbs"  

if defined Eingabe (GOTO weiter) else (GOTO :n-weiter)

:weiter
echo weiter %Eingabe%
pause
exit

:n-weiter
echo n-weiter
pause
exit

Gruß OKIDOKI
bastla
bastla 13.03.2012, aktualisiert am 18.10.2012 um 18:50:18 Uhr
Goto Top
Hallo OKIDOKI!

Den hast Du nícht gefunden?

Grüße
bastla
OKIDOKI
OKIDOKI 13.03.2012 um 14:24:59 Uhr
Goto Top
Hallo bastla,

doch, doch!
Ich dachte nur, dass man o.g. Dialog mit wenigen Änderungen verwenden kann. Dein Verweis funktioniert irgendwie noch nicht, "Start Ordner" findet er nicht und mit "WScript.Echo" hat er auch noch Probleme ...

Doch das wäre eine andere Geschichte face-wink
Gruß OKIDOKI
bastla
bastla 13.03.2012 um 14:40:09 Uhr
Goto Top
Hallo OKIDOKI!

Ich würde das zwar heute ein wenig anders schreiben - etwa
AuswahlTitel = "Bitte Verzeichnis auswählen"  
StartOrdner = "17"  'Arbeitsplatz  
Set Dateiauswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner)  
If Not Dateiauswahl Is Nothing Then WScript.Echo Dateiauswahl.Self.Path
- aber "Start Ordner" käme noch immer nicht darin vor ...

Grüße
bastla
OKIDOKI
OKIDOKI 13.03.2012 um 14:50:15 Uhr
Goto Top
Hallo bastla,

da waren sie wieder meine Probleme face-wink:
Es passiert nichts ...
PS: Wie legt man zusätzlich ein Verzeichnis und die Dateiart fest?

@ECHO OFF & SETLOCAL
 >%temp%\msgbox.vbs ECHO AuswahlTitel = "Bitte Datei oder Verzeichnis auswählen"  
>>%temp%\msgbox.vbs StartOrdner = "17"  'Arbeitsplatz  
>>%temp%\msgbox.vbs Set Dateiauswahl = CreateObject("Shell.Application").BrowseForFolder(0,AuswahlTitel,16,StartOrdner)  
>>%temp%\msgbox.vbs If Not Dateiauswahl Is Nothing Then WScript.Echo Dateiauswahl.Self.Path

set "Eingabe="  
for /f "delims=" %%i in ('cscript //nologo %temp%\msgbox.vbs') do set "Eingabe=%%i"  

del "%temp%\msgbox.vbs"  

if defined Eingabe (GOTO weiter) else (GOTO :n-weiter)

:weiter
echo weiter %Eingabe%
pause
exit

:n-weiter
echo n-weiter
pause
exit

Gruß OKIDOKI
PS2: Mit fertigem Ergebnis dieses Threads hätten wir sowohl Datei-, wie auch Ordnerauswahl in einer Luxusvariante...