et0815
Goto Top

Warum kein !-Zeichen möglich?

Hallo alle zusammen,

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

Content-ID: 208824

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

Ausgedruckt am: 15.11.2024 um 11:11 Uhr

certifiedit.net
certifiedit.net 28.06.2013 um 21:44:35 Uhr
Goto Top
1. Wofür brauchst du das Skript?
2. Warum willst du "!" anzeigen lassen?
3. Wie definierst du "nirgens"?
bastla
bastla 28.06.2013 aktualisiert um 22:59:01 Uhr
Goto Top
Hallo ET0815!

Ä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
rubberman
rubberman 28.06.2013 aktualisiert um 23:05:16 Uhr
Goto Top
Hallo ET0815.

Der Code kommt mir doch sehr bekannt vor face-wink

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
ET0815
ET0815 06.07.2013 um 18:51:18 Uhr
Goto Top
alles klar, danke rubberman! jetzt funktionierts

Gruß