Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Warum kein !-Zeichen möglich?

Frage Entwicklung Batch & Shell

Mitglied: ET0815

ET0815 (Level 1) - Jetzt verbinden

28.06.2013 um 21:30 Uhr, 1748 Aufrufe, 4 Kommentare, 2 Danke

Hallo alle zusammen,

diesen Programmschnipsel habe ich im Netz gefunden:

01.
@echo off &setlocal 
02.
 
03.
<nul set /p "=Enter your password: " 
04.
call :HInput pw 
05.
echo Input length is %errorlevel% 
06.
setlocal EnableDelayedExpansion 
07.
echo Your password is %pw% 
08.
pause 
09.
goto :eof 
10.
 
11.
 
12.
:HInput [ByRef_VarName] 
13.
:: inspired by Carlos @ www.DosTips.com 
14.
if "%__HI__%" neq "__HI__" ( 
15.
  setlocal DisableDelayedExpansion 
16.
  set "S=" &set "N=0" &set "__HI__=__HI__" 
17.
  for /f %%i in ('"prompt;$h&for %%i in (1) do rem"') do set "BS=%%i" 
18.
19.
set "C=" 
20.
for /f "delims=" %%i in ('2^>nul xcopy /lw "%~f0" "%~f0"') do if not defined C set "C=%%i" 
21.
set "C=%C:~-1%" 
22.
setlocal EnableDelayedExpansion 
23.
if not defined C ( 
24.
  echo( 
25.
  if "%~1"=="" ( 
26.
    echo(!S! 
27.
    endlocal &endlocal &exit /b %N% 
28.
  ) else ( 
29.
    if defined S ( 
30.
      for /f delims^=^ eol^= %%i in ("!S!") do endlocal &endlocal &set "%~1=%%i" &exit /b %N% 
31.
    ) else endlocal &endlocal &set "%~1=" &exit /b 0 
32.
33.
34.
if "!BS!"=="!C!" ( 
35.
  set "C=" 
36.
  if defined S set /a "N -= 1" &set "S=!S:~,-1!" &<nul set /p "=%BS% %BS%" 
37.
) else set /a "N += 1" &<nul set /p "=*" 
38.
if not defined S ( 
39.
  endlocal &set "N=%N%" &set "S=%C%" 
40.
) else for /f delims^=^ eol^= %%i in ("!S!") do endlocal &set "N=%N%" &set "S=%%i%C%" 
41.
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
Mitglied: certifiedit.net
28.06.2013 um 21:44 Uhr
1. Wofür brauchst du das Skript?
2. Warum willst du "!" anzeigen lassen?
3. Wie definierst du "nirgens"?
Bitte warten ..
Mitglied: bastla
28.06.2013, aktualisiert um 22:59 Uhr
Hallo ET0815!

Ändere Zeile 7 auf
echo Your password is !pw!
Zur eigentlichen Frage siehe zB http://www.administrator.de/contentid/166740

Grüße
bastla
Bitte warten ..
Mitglied: rubberman
28.06.2013, aktualisiert um 23:05 Uhr
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
endlocal
wieder aus, sobald du sie nicht mehr benötigst.

Grüße
rubberman
Bitte warten ..
Mitglied: ET0815
06.07.2013 um 18:51 Uhr
alles klar, danke rubberman! jetzt funktionierts

Gruß
Bitte warten ..
Neuester Wissensbeitrag
Windows Update

Windows Update-Suche nach Win7 Neuinstallation wieder schneller

(1)

Erfahrungsbericht von the-buccaneer zum Thema Windows Update ...

Ähnliche Inhalte
Windows Userverwaltung
Ausnahmen für FSRM pro User oder für jede Situation möglich? (2)

Frage von M.Marz zum Thema Windows Userverwaltung ...

Windows 10
Keine Tastatureingabe in Systemapps möglich

Frage von OSIlayer8 zum Thema Windows 10 ...

LAN, WAN, Wireless
Fritzbox Landingpage - haben Nutzungsbedingungen ein Limit von 200 Zeichen? (7)

Frage von DerWoWusste zum Thema LAN, WAN, Wireless ...

Windows Server
Ordnerumleitung durch Zugriffsverweigerung nicht möglich (1)

Frage von F5Hauer zum Thema Windows Server ...

Heiß diskutierte Inhalte
Exchange Server
Bestehende eMails autoamatisch weiterleiten (21)

Frage von metal-shot zum Thema Exchange Server ...

Hyper-V
gelöst Reiner Hyper- V Server oder lieber Rolle (21)

Frage von Winuser zum Thema Hyper-V ...

SAN, NAS, DAS
gelöst Synology Version 6.1 Probleme (18)

Frage von Hendrik2586 zum Thema SAN, NAS, DAS ...

Router & Routing
gelöst IP Kamera für drei unabhängige Netzwerke (16)

Frage von ProfessorZ zum Thema Router & Routing ...