sensibe
Goto Top

Inputbox in Batchdatei auslesen

Hallo liebe Community,

ich benutze Windows7 und habe folgenden Code:

@echo off
title Test
color 2F
mode 55,9

:: Set variable for InputBox:
set myMessage=Hallo, wie ist dein Name?
set myTitle=Bitte Namen eingeben
call :subInputBox

:: Display variable
if "%flag%"=="false" (  
	set myMessage=Es wurde nichts eingegeben, oder die Eingabe abgebrochen.
	set myTitle=Keine Eingabe
	call :subMsgBox
) else (
	set myMessage=Hallo %cmdText%!
	set myTitle=Begrüßung
	call :subMsgBox
)
goto End

:: Start subroutine subInputBox
:subInputBox
set VBS="%Temp%\vbsInputBox.vbs"  
set CMD="%Temp%\cmdVar.bat"  
 
>> %VBS% echo Option Explicit 
>> %VBS% echo Dim strText  
>> %VBS% echo Dim objShell : Set objShell = CreateObject("Wscript.Shell")    
>> %VBS% echo Dim objFSO   : Set objFSO = CreateObject("Scripting.FileSystemObject")   
>> %VBS% echo Dim objFile  : Set objFile = objFSO.CreateTextFile(%CMD%) 
:: Pass variable from batch to VBScript
>> %VBS% echo strText = InputBox("%myMessage%", "%myTitle%")  
>> %VBS% echo if strText = vbNullString then 
:: Create batch file
>> %VBS% echo objFile.WriteLine "@echo off"  
>> %VBS% echo objFile.WriteLine "set flag=false"   
>> %VBS% echo else 
>> %VBS% echo objFile.WriteLine "@echo off"  
:: Set variable in batch file
>> %VBS% echo objFile.WriteLine "set cmdText=" ^& strText    
>> %VBS% echo end if 
>> %VBS% echo objFile.Close  
 
cscript %VBS% > NUL
call %CMD% > NUL
 
del %CMD%
del %VBS%
 
goto :EOF
:: End subroutine subInputBox

:: Start subroutine subMsgBox
:subMsgBox
>> %Temp%\MsgBox.vbs echo MsgBox "%myMessage%", VbInformation + VbOKOnly, "%myTitle%"   
cscript %Temp%\MsgBox.vbs > NUL
del %Temp%\MsgBox.vbs
goto :EOF
:: End of subroutine subMsgBox

:: End of batch file
:End

Wo müsste ich welchen Code einsetzen, um die Eingabe in einer .txt Datei festzuhalten? Ich komme leider nicht weiter, da ich auch fast gar keine Ahnung von Programmierung habe.

Content-ID: 386270

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

Ausgedruckt am: 23.11.2024 um 14:11 Uhr

Pjordorf
Pjordorf 12.09.2018 um 19:23:27 Uhr
Goto Top
Hallo,

Zitat von @Sensibe:
Wo müsste ich welchen Code einsetzen, um die Eingabe in einer .txt Datei festzuhalten?
Welche Eingabe meinst du denn?
In Batch oder in VBS?

Ich komme leider nicht weiter, da ich auch fast gar keine Ahnung von Programmierung habe.
Und, hast du denn verstanden was du dort zusammenkopiert hast und was dort jeweils passiert?
Vielleicht besser erstmal sich in Batch und in VBS weiterbilden
http://www.robvanderwoude.com/wshstart.php
http://www.robvanderwoude.com/batchfiles.php

Gruß,
Peter
Sensibe
Sensibe 13.09.2018 um 09:33:44 Uhr
Goto Top
Hallo Peter,

danke für deine Rückmeldung. Ich meinte damit, alles was nach Ausführung der Batch Datei in der InputBox eingegeben wird, in einer separaten .txt Datei gespeichert werden soll. Im Prinzip wie ein Logfile.

Ja, ich weiß was ich da zusammenkopiert habe und auch teilweise die Bedeutung von vielen Zeilen. Ich weiß auch was passiert, aber leider weiß ich nicht wie ich die Eingaben, die in der InputBox eingegeben werden, speichern kann.

Ich hoffe du kannst mir weiterhelfen.
H41mSh1C0R
H41mSh1C0R 13.09.2018 um 10:47:33 Uhr
Goto Top
Da du aus der Batch heraus das MsgBox.vbs startest wird dir denke ich nichts anderes übrigbleibt als in diesem vbs die "Logging" Funktion einzubauen.

Was steht denn in dem vbs drinnen?
Pjordorf
Pjordorf 13.09.2018 um 11:05:00 Uhr
Goto Top
Hallo,

Zitat von @H41mSh1C0R:
Was steht denn in dem vbs drinnen?
Schau dir mal den Quelltext genau an. Ist schon alles drin denn er baut mit diesem skript ja erst seine VBS.

Gruß,
Peter
Pjordorf
Pjordorf 13.09.2018 aktualisiert um 18:20:10 Uhr
Goto Top
Hallo,

Zitat von @Sensibe:
Im Prinzip wie ein Logfile.
Schon in dein Skript drin.

Ja, ich weiß was ich da zusammenkopiert habe
Nö.

und auch teilweise die Bedeutung von vielen Zeilen. Ich weiß auch was passiert,
Nö und Nö.

aber leider weiß ich nicht wie ich die Eingaben, die in der InputBox eingegeben werden, speichern kann.
In deine Zeile 49 ein REM davor, dann bleibt die Datei CMDText.bat erhalten. Dort steht schon deine Eingabe drin. Und wenn du diese Batch dann ausführst steht die auch in deiner Umgebung drin. Prüfen mit set cmdtext. Solange deine Batchdateien und VBS Dateien am laufen sind wird zwar auch diese batch ausgeführt, aber die umgebung wird ja am ende wieder verlassen und die cmdtext ist wieder aus deiner Umgebung verschwunden (Standartverhalten).

Und wenn du in Zeile 50 ebenfalls ein REM davor setzt, bleibt auch die Datei MsgBox.vbs erhalten wo ebenfalls deine eingabe mit drin steht. Denn zaubern kann eine Batch oder VBS auch nicht. Notfalls mit mse7.exe (gehört zum Office) deine VBS Dateien dubuggen.

Du solltest dich ernsthaft mit Batch und VBS befassen.

Gruß,
Peter

[Nachtrag 18:05]
Wenn du in Zeile 46 die Umleitung nach NUL entfernst, ein Set cmdtext und darunter ein Pause setzt, kannst du im dortigen Fenster (Grün mit weisser Schrift) dann deine umgebungsvariabel CMDText sehen. Aber da du dieses Fenster ja schliesst, wird auch die umgebung damit geschlossen. Deine Zeile 46 sähe dann so aus
cscript %VBS%
SET cmdtext
Pause

call %CMD% > NUL
Wenn du also dein Eingabe.cmd von ein CMD Fenster aus startest und erst nachdem du Pause gedrückt hast ist ein set cmdtext erfolgreich denn beim starten deiner CMD Konsolenfenstersitzung ist diese Variable (CMDText) ja noch gar nicht existent. Also ist dein CMDText erst nachdem du deine Msgbox bestätigt hast auch in diesem grünen Fenster und seine Umgebung existent. Ein Manuelles set cmdtext dort zeigt es dir.
[/Nachtrag]
Friemler
Friemler 13.09.2018 um 17:54:02 Uhr
Goto Top
Hallo Sensibe,

Du hast hier ein Batchscript, das ein VBScript anlegt, das wiederum ein Batchscript anlegt, in dem die Eingabe aus der InputBox des VBScripts in eine Environment-Variable übertragen wird. Das zweite Batchscript wird vom Haupt-Batchscript mit einem eigenen Environment-Block ausgeführt, das Setzen der Environment-Variablen verändert nur diesen Environment-Block, nach der Rückkehr aus dem zweiten Batchscript ist die Variable und ihr Wert nicht mehr vorhanden. Deshalb funktioniert Dein Code nicht wie gewünscht.

Wenn Du jetzt nichts verstehst, kann ich das gut nachvollziehen, denn diese Struktur ist viel zu kompliziert.

Nachdem Du in Zeile 34 die Eingabe erfasst hast, kannst Du diese mit
WScript.Echo strText
ausgeben (das ist VBScript-Code und muss dementsprechend mit in die VBS-Datei geschrieben werden).

Das VBScript führst Du dann so aus:
set "CmdText="
for /f "delims=" %%a in ('cscript /nologo "%VBS%"') do set "CmdText=%%a"

Danach hast Du die Eingabe aus der InputBox in der Variablen %CmdText% zur Verfügung. Wenn der Benutzer in der InputBox nur ENTER gedrückt hat, ist die Variable leer.

Siehe auch mein Tutorial zur FOR-Schleife.

Grüße
Friemler
137084
137084 17.09.2018 aktualisiert um 10:14:47 Uhr
Goto Top
Oder man macht sich so eine MsgBox in dieser Variante
powershell -Executionpolicy ByPass  -NoProfile -Command "Add-Type -A Microsoft.VisualBasic;return [Microsoft.VisualBasic.Interaction]::InputBox('Bitte Daten eingeben','Eingabe')" >"C:\datei.txt"