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-Key: 208824

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: falscher-sperrstatus
falscher-sperrstatus Jun 28, 2013 at 19:44:35 (UTC)
Goto Top
1. Wofür brauchst du das Skript?
2. Warum willst du "!" anzeigen lassen?
3. Wie definierst du "nirgens"?
Member: bastla
bastla Jun 28, 2013 updated at 20:59:01 (UTC)
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
Member: rubberman
rubberman Jun 28, 2013 updated at 21:05:16 (UTC)
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
Member: ET0815
ET0815 Jul 06, 2013 at 16:51:18 (UTC)
Goto Top
alles klar, danke rubberman! jetzt funktionierts

Gruß