Warum kein !-Zeichen möglich?
Hallo alle zusammen,
diesen Programmschnipsel habe ich im Netz gefunden:
Diese Teil habe ich in meine Batch eingefügt und nun kann ich nirgens mehr "!" Zeichen mehr anzeigen lassen. Wo liegt der Fehler?
Gruß
Toni
diesen Programmschnipsel habe ich im Netz gefunden:
@echo off &setlocal
<nul set /p "=Enter your password: "
call :HInput pw
echo Input length is %errorlevel%
setlocal EnableDelayedExpansion
echo Your password is %pw%
pause
goto :eof
:HInput [ByRef_VarName]
:: inspired by Carlos @ www.DosTips.com
if "%__HI__%" neq "__HI__" (
setlocal DisableDelayedExpansion
set "S=" &set "N=0" &set "__HI__=__HI__"
for /f %%i in ('"prompt;$h&for %%i in (1) do rem"') do set "BS=%%i"
)
set "C="
for /f "delims=" %%i in ('2^>nul xcopy /lw "%~f0" "%~f0"') do if not defined C set "C=%%i"
set "C=%C:~-1%"
setlocal EnableDelayedExpansion
if not defined C (
echo(
if "%~1"=="" (
echo(!S!
endlocal &endlocal &exit /b %N%
) else (
if defined S (
for /f delims^=^ eol^= %%i in ("!S!") do endlocal &endlocal &set "%~1=%%i" &exit /b %N%
) else endlocal &endlocal &set "%~1=" &exit /b 0
)
)
if "!BS!"=="!C!" (
set "C="
if defined S set /a "N -= 1" &set "S=!S:~,-1!" &<nul set /p "=%BS% %BS%"
) else set /a "N += 1" &<nul set /p "=*"
if not defined S (
endlocal &set "N=%N%" &set "S=%C%"
) else for /f delims^=^ eol^= %%i in ("!S!") do endlocal &set "N=%N%" &set "S=%%i%C%"
goto HInput
Diese Teil habe ich in meine Batch eingefügt und nun kann ich nirgens mehr "!" Zeichen mehr anzeigen lassen. Wo liegt der Fehler?
Gruß
Toni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 208824
Url: https://administrator.de/contentid/208824
Ausgedruckt am: 15.11.2024 um 11:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo ET0815!
Ändere Zeile 7 auf
Zur eigentlichen Frage siehe zB Batch Anfänger Fragen zu setlocal, enabledelayedexpansion, set, for
Grüße
bastla
Ändere Zeile 7 auf
echo Your password is !pw!
Zur eigentlichen Frage siehe zB Batch Anfänger Fragen zu setlocal, enabledelayedexpansion, set, for
Grüße
bastla
Hallo ET0815.
Der Code kommt mir doch sehr bekannt vor
Ich vermute ich weiß worauf du hinaus willst.
Zeile 6 schaltet die verzögerte Variablenerweiterung ein. Dies ist nötig um auch Sonderzeichen, wie &<>| in der Variablen pw ohne Nebenwirkungen auszugeben. Ausrufezeichen bekommen so aber einen Sonderstatus, da sie statt Prozentzeichen bei der Variablenerweiterung verwendet werden (solltest du eigentlich in Zeile 7 so nutzen, im ursprünglichen Code steht deshalb auch !pw!).
Einfachste Lösung:
Schalte die verzögerte Variablenerweiterung mit einem
wieder aus, sobald du sie nicht mehr benötigst.
Grüße
rubberman
Der Code kommt mir doch sehr bekannt vor
Ich vermute ich weiß worauf du hinaus willst.
Zeile 6 schaltet die verzögerte Variablenerweiterung ein. Dies ist nötig um auch Sonderzeichen, wie &<>| in der Variablen pw ohne Nebenwirkungen auszugeben. Ausrufezeichen bekommen so aber einen Sonderstatus, da sie statt Prozentzeichen bei der Variablenerweiterung verwendet werden (solltest du eigentlich in Zeile 7 so nutzen, im ursprünglichen Code steht deshalb auch !pw!).
Einfachste Lösung:
Schalte die verzögerte Variablenerweiterung mit einem
endlocal
wieder aus, sobald du sie nicht mehr benötigst.
Grüße
rubberman