okidoki
Goto Top

Tastaturlayout ändern - InputBox enthält falsche Zeichen

Hallo,
ich habe eine DOS-Box und möchte gerne eine richtige Textdarstellung. Statt ü wird " angezeigt usw. welchen Befehl muss ich einbauen?

Nicht funktioniert hat:

KEYB GR,,%WINDIR%\SYSTEM32\KEYBOARD.SYS
und auch die Codepage zu ändern
chcp 1252
brachte leider keinen Erfolg ...

OKIDOKI


@ECHO OFF & SETLOCAL
 >%temp%\msgbox.vbs ECHO WScript.Echo InputBox("Wie wird das Wetter" ^& vbCrLf ^& _  
>>%temp%\msgbox.vbs ECHO    "heute?",  _  
>>%temp%\msgbox.vbs ECHO    "ABFRAGE", _  
>>%temp%\msgbox.vbs ECHO    "", _  
>>%temp%\msgbox.vbs ECHO    "")  

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

ECHO %Eingabe%

Pause
Exit

Content-ID: 228695

Url: https://administrator.de/forum/tastaturlayout-aendern-inputbox-enthaelt-falsche-zeichen-228695.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

bastla
bastla 04.02.2014 um 22:08:46 Uhr
Goto Top
Hallo OKIDOKI!

Abgesehen davon, dass ich das etwas straffen würde, zB
@ECHO OFF & SETLOCAL
>%temp%\msgbox.vbs ECHO WScript.Echo InputBox("Wie wird das Wetter" ^& vbCrLf ^& "heute?", "ABFRAGE")  

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

ECHO %Eingabe%
PAUSE
funktioniert es bei mir (ohne Umschaltung der Default-Codepage 850) unter XP und W7 auch mit Umlauten ...

Grüße
bastla
OKIDOKI
OKIDOKI 04.02.2014 um 22:44:21 Uhr
Goto Top
Hallo bastla,
ich habe den Störenfried gefunden: Nach deinem Hinweis habe ich alles noch einmal durchprobiert, in der InputBox läuft es durch. Später lese ich allerdings eine Datei ein und ersetze eine Variable durch die zuvor eingegebene. Dann passiert es, er verhaut es! Komischerweise liest er den restlichen Test (ebenfalls mit ü etc.) korrekt ein. Kannst du mir das mal erklären? face-wink

Dankeschön, OKIDOKI


@ECHO OFF & SETLOCAL
>%temp%\msgbox.vbs ECHO WScript.Echo InputBox("Wie wird das Wetter" ^& vbCrLf ^& "heute?", "ABFRAGE")  

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

:: replace in Datei
 >%temp%\convert.vbs ECHO Datei = "beispiel.txt"   
>>%temp%\convert.vbs ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%temp%\convert.vbs ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%temp%\convert.vbs ECHO fso.CreateTextFile(Datei).Write Replace(T, "text", "%Eingabe%")  
:: Ende replace in Datei
%temp%\convert.vbs
del %temp%\convert.vbs

Pause
exit
bastla
Lösung bastla 04.02.2014, aktualisiert am 05.02.2014 um 11:08:04 Uhr
Goto Top
Hallo OKIDOKI!

Wenn Du nicht gleich den gesamten Ablauf in einem einzigen Script erledigst - etwa:
@ECHO OFF & SETLOCAL
set "Script=%temp%\convert.vbs"  
 >%Script% ECHO Eingabe = InputBox("Wie wird das Wetter" ^& vbCrLf ^& "heute?", "ABFRAGE")  
>>%Script% ECHO Datei = "beispiel.txt"   
>>%Script% ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%Script% ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%Script% ECHO fso.CreateTextFile(Datei).Write Replace(T, "text", Eingabe)  
cscript //nologo %Script%
del %Script%
Pause
solltest Du als Zeile 7 den Wechsel der Codepage mit
chcp 1252>nul
einbauen und diesen ggf in Zeile 16 wieder rückgängig machen ...

Grüße
bastla
OKIDOKI
OKIDOKI 05.02.2014 um 07:09:31 Uhr
Goto Top
Hallo bastla,

auch wenn dein Vorschlag wieder einmal super ist, habe ich dennoch eine Frage: Bei der Abfrage ist auch die Möglichkeit auf Abruch zu klicken. Leider würder er in diesem Fall "text" durch eine leere Variable ersetzen. Wie ist es also möglich, bei fehlender Eingabe oder Abbruch dies zu verhindern? (bzw. einen Alternativtext einzusetzen?)

Grüße
OKIDOKI
bastla
Lösung bastla 05.02.2014 aktualisiert um 11:08:07 Uhr
Goto Top
Hallo OKIDOKI!
Wie ist es also möglich, bei fehlender Eingabe oder Abbruch dies zu verhindern? (bzw. einen Alternativtext einzusetzen?)
Die entsprechende Abfrage in VBS sähe etwa so aus:
If Eingabe = "" Then WScript.Quit
oder so:
If Eingabe = "" Then Eingabe = "Ersatztext"
Grüße
bastla
OKIDOKI
OKIDOKI 05.02.2014 um 11:07:29 Uhr
Goto Top
Hallo bastla,

ich danke dir!

Grüße OKIDOKI
OKIDOKI
OKIDOKI 13.02.2014 um 20:31:14 Uhr
Goto Top
Hallo bastla,
ich habe noch eine Anschlussfrage:

Wie lässt sich eine weitere Variable (DIM = Info) definieren, wenn es eine Eingabe gegeben hat?

Folgender Versuch misslingt:
@ECHO OFF & SETLOCAL
set "Script=%temp%\convert.vbs"  
 >%Script% ECHO Eingabe = InputBox("Wie wird das Wetter" ^& vbCrLf ^& "heute?", "ABFRAGE")  

>>%Script% ECHO DIM = Info
>>%Script% ECHO If Eingabe = "" Then Eingabe = "Ersatztext" Else = Info "Eingabe definiert"  

>>%Script% ECHO Datei = "beispiel.txt"   
>>%Script% ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%Script% ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%Script% ECHO fso.CreateTextFile(Datei).Write Replace(T, "text", Eingabe)  
cscript //nologo %Script%
del %Script%
Viele Grüße
OKIDOKI
bastla
bastla 13.02.2014 aktualisiert um 22:31:28 Uhr
Goto Top
Hallo OKIDOKI!

Abgesehen davon, dass "DIM" ein denkbar schlechter Variablenname ist (da ein Sprachelement von VBS) - was genau hast Du damit vor?

Außerdem: Falls "Info" ein Text sein soll, fehlen Anführungszeichen; in der derzeitigen Fassung wird "Info" als Variable interpretiert und hat natürlich keinen Wert (woher auch) ...

Die Abhängigkeit von einer Eingabe lässt sich ansonsten so realisieren (Deine Zeile 6 ist syntaktisch nicht OK):
If Eingabe = "" Then  
    WScript.Echo "Keine Eingabe"  
Else
    WScript.Echo "Eingabe erfolgt: " & Eingabe  
    WScript.Echo "Weitere Anweisung"  
End If
Als Einzeiler:
If Eingabe = "" Then WScript.Echo "Keine Eingabe" Else WScript.Echo "Eingabe erfolgt: " & Eingabe : WScript.Echo "Weitere Anweisung"
Der Doppelpunkt dient hier (vergleichbar mit dem "&" in Batch) dazu, mehrerer Befehle in eine Zeile zu schreiben.

Grüße
bastla
OKIDOKI
OKIDOKI 14.02.2014 um 07:34:54 Uhr
Goto Top
Hallo bastla,

(abends lieber mit Autopilot...)
Ich meinte natürlich:

@ECHO OFF & SETLOCAL
set "Script=%temp%\convert.vbs"  
 >%Script% ECHO Eingabe = InputBox("Wie wird das Wetter" ^& vbCrLf ^& "heute?", "ABFRAGE")  

:: Hier müsst doch vorher die Variable Eingabe-b definiert werden?
>>%Script% ECHO If Eingabe = "" Then Eingabe = "Ersatztext" Else Eingabe-b = "Eingabe definiert"  

>>%Script% ECHO Datei = "beispiel.txt"   
>>%Script% ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%Script% ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%Script% ECHO fso.CreateTextFile(Datei).Write Replace(T, "text", Eingabe)  
cscript //nologo %Script%
del %Script%

... also: Wenn keine Eingabe, dann "Ersatztext", wenn doch dann "Eingabe definiert"
Mein Ziel: Neue Variable (Eingabe-b) soll als E-Mail verschickt werden. Verschicken gelingt schon, leider fehlt die Variable ...

Gruß
OKIDOKI
bastla
bastla 14.02.2014 um 15:13:06 Uhr
Goto Top
Hallo OKIDOKI!

Ich kann noch immer nicht erkennen, wie Du "Eingabe-b" verwenden willst - die Wertzuweisung sollte so aber natürlich klappen (ein "Vorweg-Definieren" der Variablen ist, wie auch für "Eingabe", nicht erforderlich) ...

Grüße
bastla
OKIDOKI
OKIDOKI 14.02.2014 aktualisiert um 16:19:08 Uhr
Goto Top
Hallo bastla,

hier der komplette Code:

:: Zuerst Daten vom Server laden
 > "%temp%\senden.txt" ECHO open server.de  
>> "%temp%\senden.txt" ECHO user  
>> "%temp%\senden.txt" ECHO pw  
>> "%temp%\senden.txt" ECHO cd verzeichnis  
>> "%temp%\senden.txt" ECHO get "mail-text.txt"  
>> "%temp%\senden.txt" ECHO get "adressen.txt"  
>> "%temp%\senden.txt" ECHO QUIT  
FTP -v -i -s:"%temp%\senden.txt"  
del %temp%\senden.txt

@ECHO OFF & SETLOCAL
set "Script=%temp%\convert.vbs"  
 >%Script% ECHO Eingabe = InputBox("Weitere Hinweise der" ^& vbCrLf ^& "E-Mail hinzufügen:", "ABFRAGE")  
>>%Script% ECHO If Eingabe = "" Then Eingabe = "- keine -" Else Eingabe-b = "Eingabe definiert"   
>>%Script% ECHO Datei = "mail-text.txt"   
>>%Script% ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%Script% ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%Script% ECHO fso.CreateTextFile(Datei).Write Replace(T, "- keine -", Eingabe)  

cscript //nologo %Script%
del %Script%

:: Wartebalken
start .\tools\Wbusy\Wbusy "Abfrage" "E-Mail Versand läuft ..." /marquee  
:: Uhrzeit setzten
set nt=%time:~0,2%-%time:~3,2%-%time:~6,2%
set "nt=%nt: =0%"  
:: in Variable %nt% steht die Uhrzeit für die E-Mail Überschrift

::Sendedatei zusammenstellen
set /p recipient=<adressen.txt
 >%temp%\mail.bat ECHO @echo off
>> %temp%\mail.bat ECHO set sender=adresse@server.de
>> %temp%\mail.bat ECHO set subject="Update %nt% Uhr %Eingabe-b%"  
>> %temp%\mail.bat ECHO set server="serverXXX"  
>> %temp%\mail.bat ECHO set usr=userXXX
>> %temp%\mail.bat ECHO set pass="pwXXX"  
>> %temp%\mail.bat ECHO .\tools\blat\blat "mail-text.txt" -f %%sender%% -b "absender@server.de" -to %%recipient%% -subject %%subject%% -server %%server%% -u %%usr%% -pw %%pass%%  
>> %temp%\mail.bat ECHO .\tools\Wbusy\Wbusy "Abfrage" "E-Mail versendet." /Stop  
>> %temp%\mail.bat ECHO del mail-text.txt adressen.txt

%temp%\mail.bat
del %temp%\mail.bat
exit

In der E-Mail Betreffzeile: Entweder nur Datum und Zeit oder der Hinweis auf zusätzliche Eingabe im E-Mail Text (%Eingabe-b), falls sie stattgefunden hat.

Grüße
OKIDOKI
bastla
bastla 14.02.2014 um 18:11:08 Uhr
Goto Top
Hallo OKIDOKI!

Wenn Du den Inhalt der Variablen "Eingabe-b" (BTW: sollte mit zB "Eingabe nicht definiert" vorbelegt sein) in Batch benötigst, dann etwa mit folgenden Zeilen 20 und 21:
>>%Script% ECHO WScript.Echo Eingabe-b
for /f "delims=" %%i in ('cscript //nologo  %Script%') do set "Eingabe-b=%%i"  
Grüße
bastla
OKIDOKI
OKIDOKI 14.02.2014 um 20:35:42 Uhr
Goto Top
Hallo bastla,
leider ist die Variable (jetzt info) bei einer fehlenden Eingabe totzdem belegt, so dass "Eingabe definiert" erscheint, auch wenn keine Eingabe stattfand ... ;-(

@ECHO OFF & SETLOCAL
set "Script=%temp%\convert.vbs"  
 >%Script% ECHO Eingabe = InputBox("Weitere Hinweise der" ^& vbCrLf ^& "E-Mail hinzufügen:", "ABFRAGE")  
>>%Script% ECHO If Eingabe = "" Then Eingabe = "- keine -" Else info = "Eingabe definiert"  
>>%Script% ECHO Datei = "mail-text.txt"   
>>%Script% ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%Script% ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%Script% ECHO fso.CreateTextFile(Datei).Write Replace(T, "- keine -", Eingabe)  
>>%Script% ECHO WScript.Echo info
for /f "delims=" %%i in ('cscript //nologo  %Script%') do set "info=%%i"  
del %Script%

Grüße
OKIDOKI
bastla
bastla 14.02.2014 um 23:00:26 Uhr
Goto Top
Hallo OKIDOKI!
leider ist die Variable (jetzt info) bei einer fehlenden Eingabe totzdem belegt
Kann ich mit Deinem geposteten Code nicht nachvollziehen, aber Du kannst ja vor Zeile 10 einfügen
set "info="
wobei ich eher (wie schon oben vorgeschlagen)
set "info=Eingabe nicht definiert"
verwenden würde, da so %info% immer einen eindeutigen Inhalt hätte ...

Grüße
bastla
OKIDOKI
OKIDOKI 15.02.2014 um 09:50:37 Uhr
Goto Top
Hallo bastla,

9:31 Uhr Durchbruch: es funktioniert! (beide Varianten von 23:00 Uhr).

Ich backe gerade Waffeln für nachher und werde dir eine per Mail schicken face-wink

Dankeschön,
OKIDOKI

Für alle Interessierten hier noch eimal der komplette Code. Das hat mir bei vielen schon geholfen, eine Zusammenfassung am Ende!

Kurze Erklärung: (Batch-Datei, die sich selbst vbs erstellt und dann weiter im Batch arbeitet)
Ein vorbereiteter E-Mail Text und die Adressen werden vom Server geladen (geeignet für Massenmails). Zusätzliche Nachrichten können eingefügt werden (- keine -) im Mail Text wird ersetzt durch die Eingabe.
Mithilfe des Programms "blat" wird die E-Mail verschickt, wobei in der Betreffzeile der Hinweis auf zusätzlichen Text erscheint!
PS: wbusy ist übrigens eine tolle Variante (wie ich finde) einen Wartebalken zu simulieren! (Auch hier im Forum finden sich dazu viele Diskussionen face-wink)

:: E-Mail Text und Adressen herunterladen
 > "%temp%\senden.txt" ECHO open server.de  
>> "%temp%\senden.txt" ECHO user  
>> "%temp%\senden.txt" ECHO pw  
>> "%temp%\senden.txt" ECHO cd verzeichnis  
>> "%temp%\senden.txt" ECHO get "mail-text.txt"  
>> "%temp%\senden.txt" ECHO get "adressen.txt"  
>> "%temp%\senden.txt" ECHO QUIT  
FTP -v -i -s:"%temp%\senden.txt"  
del %temp%\senden.txt

:: Zusätzliche E-Mail Eingabe möglich, dann Hinweis in E-Mail Kopfzeile
@ECHO OFF & SETLOCAL
set "Script=%temp%\convert.vbs"  
 >%Script% ECHO Eingabe = InputBox("Weitere Hinweise der" ^& vbCrLf ^& "E-Mail hinzufügen:", "ABFRAGE")  
>>%Script% ECHO If Eingabe = "" Then Eingabe = "- keine -" Else info = " /Hinweise"  
>>%Script% ECHO Datei = "mail-text.txt"   
>>%Script% ECHO Set fso = CreateObject("Scripting.FileSystemObject")   
>>%Script% ECHO T = fso.OpenTextFile(Datei).ReadAll 
>>%Script% ECHO fso.CreateTextFile(Datei).Write Replace(T, "- keine -", Eingabe)  
>>%Script% ECHO WScript.Echo info
set "info="  
for /f "delims=" %%i in ('cscript //nologo  %Script%') do set "info=%%i"  
del %Script%

start .\tools\Wbusy\Wbusy "ABFRAGE" "E-Mail Versand läuft ..." /marquee  
:: Uhrzeit setzten für  E-Mail Überschrift
set nt=%time:~0,2%-%time:~3,2%-%time:~6,2%
set "nt=%nt: =0%"  

::Sendedatei zusammenstellen
set /p recipient=<adressen.txt
 >%temp%\mail.bat ECHO @echo off
>> %temp%\mail.bat ECHO set sender=mailadresse
>> %temp%\mail.bat ECHO set subject="Update %nt% Uhr%info%"  
>> %temp%\mail.bat ECHO set server="ausgangsserver"  
>> %temp%\mail.bat ECHO set usr=username
>> %temp%\mail.bat ECHO set pass="pw"  
>> %temp%\mail.bat ECHO .\tools\blat\blat "mail-text.txt" -f %%sender%% -b "mailadresse" -to %%recipient%% -subject %%subject%% -server %%server%% -u %%usr%% -pw %%pass%%  
>> %temp%\mail.bat ECHO .\tools\Wbusy\Wbusy "ABFRAGE" "E-Mail versendet." /Stop  
>> %temp%\mail.bat ECHO del mail-text.txt adressen.txt
:: Sendedatei aufrufen und löschen
%temp%\mail.bat
del %temp%\mail.bat