Top-Themen

Aktuelle Themen (A bis Z)

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 Zahlen unter 10 in Variable sollen beliebig mit oder ohne 0 beginnen

Mitglied: anmelder

anmelder (Level 1) - Jetzt verbinden

09.09.2018, aktualisiert 17:07 Uhr, 448 Aufrufe, 3 Kommentare

Hallo,

Programmvariable enthält immer eine zweistellige Zahl. Zahlen unter 0 beginnen manchmal mit einer 0, manchmal nicht.

Der Code soll das prüfen und nach Bedarf vereinheitlichen. Manchmal läuft der Code durch aber meistens kommt die Fehlermeldung:

"0" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Wenn ich das 2 Mal hintereinander starte wird das richtige Ergebnis teilweise erst beim 2. Mal angezeigt.

Was ist hier falsch?


01.
echo off
02.
cls
03.

04.
SET Programmvariable=8
05.

06.

07.
SET Prüfzahl=%Programmvariable%
08.
CALL :0Anhängen
09.
SET Programmvariable=%Prüfzahl%
10.

11.

12.
ECHO Ausgabe %Programmvariable%
13.

14.

15.
GOTO :Ende
16.

17.

18.

19.
:0Anhängen
20.

21.
IF %Prüfzahl% LSS 10 (
22.

23.
 SET strtmp=%Prüfzahl:~0,1%
24.

25.
 IF %strtmp% EQU 0 (
26.
  REM Zahl enthält bereits 0 am Anfang
27.
 ) ELSE (
28.
  REM Zahl muß mit 0 beginnen
29.
  SET Prüfzahl=0%Prüfzahl%
30.
 )
31.
)
32.

33.
SET strtmp=
34.

35.
GOTO :EOF
36.

37.

38.

39.

40.

41.
:0Entfernen
42.
set str=
43.
IF %Prüfzahl% LSS 10 (
44.
 SET str=%Prüfzahl:~0,1%
45.
 IF %str% EQU 0 (
46.
  REM Zahl soll nicht mit 0 beginnen
47.
  SET Prüfzahl=%Prüfzahl:~1,1%
48.
 ) ELSE (
49.
  REM Zahl enthält keine 0 am Anfang
50.
 )
51.
)
52.

53.
SET strtmp=
54.

55.
GOTO :EOF
56.

57.

58.

59.
:Ende
60.
pause
Mitglied: Friemler
10.09.2018, aktualisiert um 09:33 Uhr
Hallo,

zunächst mal ist es eine schlechte Idee, Variablennamen oder Sprungmarken so zu benennen, dass sie deutsche Umlaute enthalten.

Eine weitere Sache, die Probleme macht, ist die interne Verwendung von Zahlen, die mit einer 0 beginnen. Solche Zahlen werden vom Script-Interpreter als Oktalzahlen aufgefasst. Das Oktal-Zahlensystem hat die Basis 8, Zahlen wie 8, 9, 18, 19, usw. gibt es dort nicht, ihre Verarbeitung in Vergleichsbefehlen führt zu Fehlermeldungen und Script-Abbruch. Besser ist es, intern mit Zahlen ohne führende Nullen zu arbeiten und die Nullen erst anzufügen, wenn die Zahl z.B. ausgegeben oder zur Erzeugung eines Dateinamens benutzt wird.

Um zu verhindern, dass vom Benutzer mit führenden Nullen eingegebene Zahlen im weiteren Script-Verlauf Probleme machen, können führende Nullen folgendermaßen aus der Eingabe herausgefiltert werden:
01.
::Variable löschen
02.
set "Eingabe="
03.

04.
::Benutzereingabe lesen
05.
set /p "Eingabe=Zahl eingeben: "
06.

07.
::Führende Nullen entfernen
08.
for /f "tokens=1* delims=0" %%a in ("%Eingabe%") do set "Eingabe=%%b"
09.

10.
::Eingabe in Zahl umwandeln
11.
::aus ENTER wird 0
12.
::aus z.B. a23 wird 0
13.
::aus z.B. 2a3 wird 2
14.
set /a Eingabe=Eingabe

Um die Zahl zweistellig mit führender 0 in einen Dateinamen einzubauen kann man folgendes machen:
set "Index=0%Eingabe%"
set "Dateiname=Datei_%Index:~-2%.txt"

Grüße
Friemler
Bitte warten ..
Mitglied: 137084
LÖSUNG 10.09.2018, aktualisiert um 09:40 Uhr
Dafür braucht es eigentlich nur folgendes Konstrukt
01.
@echo off
02.
set "ProgrammVariable=8"
03.
set "ergebnis=0%ProgrammVariable%"
04.
set "ergebnis=%ergebnis:~-2%"
05.
echo %ergebnis%
Und schon hast du ein Ergebnis das immer 2 Ziffern enthält, egal ob du nun in der ProgrammVariable eine einstellige oder eine Zahl mit führender 0 stehen hast.
Du fügst also als Zwischenschritt eine 0 zur Variablen hinzu und nimmst im Anschluss immer nur die zwei Ziffern am Ende der neuen Variablen.
Bitte warten ..
Mitglied: anmelder
11.09.2018 um 16:29 Uhr
Danke euch beiden. Das zweite Beispiel ist das einfachste.
Bitte warten ..
Ähnliche Inhalte
Windows 10
Windows 10 Updates dauerhaft 0 Prozent
gelöst Frage von Ghost108Windows 106 Kommentare

Hallo zusammen, habe hier einen PC mit Win 10 Home 64bit. Es lassen sich keine Windows Updates installieren. Es ...

Java
Java von Beginn an lernen
gelöst Frage von Stefan007Java1 Kommentar

Hi zusammen, kann mir jemand aus der eigenen Erfahrung heraus sagen, welche Lektüre für den Einstieg wirklich empfehlenswert ist? ...

Netzwerkmanagement
Windows 10 PC soll per Netzwerk booten
Frage von der-dirkNetzwerkmanagement7 Kommentare

Hallo ich habe ein Problem Ich habe 2 PC die im selben Netzwerk sind PC-1 mein Laptop (Arbeits PC) ...

Datenbanken
MSSQL Text in Zahl umwandeln
gelöst Frage von EricAG3Datenbanken1 Kommentar

Hallo zusammen, folgende Tabelle sei gegeben. Menge 5,5 2,5 - 2,5 Das Feld Menge ist vom varchar. Ich möchte ...

Neue Wissensbeiträge
Windows Installation

Windows Install ISO mit übergroßer Install.wim auf FAT32 übertragen

Tipp von Lochkartenstanzer vor 2 TagenWindows Installation9 Kommentare

Moin Kollegen, Viele von euch werden sicher aus praktischen Gründen nicht nur DVDs oder "virtuelle" CD-Laufwerke (Zalman, IODD) zum ...

Datenschutz

Gehe zurück auf Los, ziehe keine 4.000 Mark. E-Privacy (erstmal) gescheitert

Information von certifiedit.net vor 2 TagenDatenschutz

Webbrowser

Firefox 71 verfügbar mit Picture in Picture Funktion

Information von sabines vor 3 TagenWebbrowser2 Kommentare

Die neue Firefox Version 71 unterstützt, zunächst nur für Windows, Picture in Picture. Damit kann ein Video in einem ...

E-Mail
SPF beim Versenden testen
Tipp von StefanKittel vor 4 TagenE-Mail3 Kommentare

Hallo, wenn man einen SPF für einen Exchange, oder anderen Mail-Server, konfigiruert muss man das ja auch testen. Ganz ...

Heiß diskutierte Inhalte
Server-Hardware
Hetzner Dedicated-Server für Terminalserver - RDSH 5 Benutzer gesucht
gelöst Frage von ra-user10Server-Hardware36 Kommentare

Hallo liebe IT-Fachleute! Ich möchte für unseren kleinen Betrieb einen Terminalserver aufsetzen und dafür das Angebot von Hetzner nutzen. ...

Switche und Hubs
PoE in erster und zweiter Instanz
Frage von moinmoin2016Switche und Hubs27 Kommentare

Moin. Ich habe versucht zum folgenden Sachverhalt ein Beitrag zu suchen, konnte aber nichts passendes finden. Folgender Sachverhalt: Ein ...

Hyper-V
Wie berechne ich mir die Anzahl der vCPU für HYPER-V aus?
Frage von samet22Hyper-V20 Kommentare

Hallo, bitte nicht schimpfen, ich habe mich nur selber gerade etwas verwirrt :D Wie berechne ich mir aus wieviele ...

Entwicklung
Powershell-Skript und Organisationseinheiten auskludieren
gelöst Frage von informatikkfmEntwicklung13 Kommentare

Hallo, ich habe ein Powershell-Skript, ähnlich wie das folgende. Ich möchte dabei, dass alle Benutzer unterhalb der OUs in ...