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

Führende Nullen in Zahlen löschen

Frage Entwicklung Batch & Shell

Mitglied: max5moritz

max5moritz (Level 1) - Jetzt verbinden

24.01.2013, aktualisiert 21:56 Uhr, 4233 Aufrufe, 6 Kommentare

Hallo Batchler,

es geht um Auswertung von Datum- und Stunden-Zahlen. Da kommen bisweilen auch führende Nullen vor.
Nun wollte ich die drei Variablen in einer Doppel-Schleife bereinigen. Leider ohne positivem Ergebnis.

folgendes Problem gilt es zu lösen:

AT1d: --24-- AT1h: --09-- AT1m: --28--
Doppel-Schleife
AT1d: --24-- AT1h: --09-- AT1m: --28--
Berechnung
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),
hexadezimale (0x11) oder oktale (021) Zahlen.


01.
For /F "tokens=1,4,5 Delims=.: " %%i in ('dir /tc "%timLog%"^|Find /i "%txc%"') Do @( 
02.
set "AT1d=%%i"&set "AT1h=%%j"&set "AT1m=%%k") 
03.
echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!-- 
04.
 
05.
FOR %%i IN (!AT1d:~0,1!,!AT1h:~0,1!,!AT1m:~0,1!) DO @if %%i equ 0 set AT=%%i & For %%j IN (AT1d,AT1h,AT1m) DO @set "%%j=!AT:~1,1!" 
06.
 
07.
echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!-- 
08.
if "%mont2:~-2,2%"=="ja" echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!-- 
09.
set /A ATm=(%AT1h%*60)+%AT1m%
Danke schon jetzt für die freundliche Unterstützung.

max5moritz
Mitglied: rubberman
24.01.2013, aktualisiert um 22:15 Uhr
Hallo max5moritz.

Am einfachsten geht das mit einer FOR /F Schleife. Das Prinzip sieht so aus:
01.
set "string=09" 
02.
 
03.
set /a num=0 
04.
for /f "tokens=* delims=0" %%i in ("%string%") do set /a num=%%i 
05.
 
06.
echo %num%
Grüße
rubberman

PS: Wenn der eingehende String IMMER 2-stellig ist, wäre auch folgendes denkbar:
set /a "num = 1%string%, num %%= 100"
Bitte warten ..
Mitglied: max5moritz
24.01.2013 um 22:46 Uhr
@rubberman

Danke für die schnelle Antwort, doch meine Wunschlösung sieht anders aus. Im folgenden mein Ansatz, der jedoch noch nicht der "letzte Schrei", weil, wie ich finde noch zu viel Zeilen

01.
For /F "tokens=1,4,5 Delims=.: " %%i in ('dir /tc "%timLog%"^|Find /i "%txc%"') Do @( 
02.
set "AT1d=%%i"&set "AT1h=%%j"&set "AT1m=%%k") 
03.
FOR %%i IN (!AT1d!,!AT1h!,!AT1m!) DO @( 
04.
	set /A ATn+=1 
05.
	set /A AT2=%%i+0  2>nul 
06.
	if %%i neq !AT2! if !ATn! equ 1 set "AT1d=!AT1d:~1,1!" 
07.
	if %%i neq !AT2! if !ATn! equ 2 set "AT1h=!AT1h:~1,1!" 
08.
	if %%i neq !AT2! if !ATn! equ 3 set "AT1m=!AT1d:~1,1!" 
09.
10.
if "%mont2:~-2,2%"=="ja" echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--
Es geht also darum, wie ich den Inhalt der 2. Schleife (ab 3.Zeile) so komprimiere, dass vielleicht nur ein Zwei- oder Einzeiler daraus wird...
Ich hoffe, dass mein Wunsch nun nachvollziehbarer ist.

max5moritz
Bitte warten ..
Mitglied: rubberman
24.01.2013 um 22:59 Uhr
Hallo max5moritz.

Was kommt denn eigentlich rein? Also welche Strings würden sich denn beispielhaft in %%i, %%j und %%k finden und was soll am Ende daraus werden?

BTW: Was stört dich an 2 Zeilen mehr oder weniger? Das ist doch völlig belanglos.

Grüße
rubberman
Bitte warten ..
Mitglied: max5moritz
24.01.2013, aktualisiert um 23:20 Uhr
Hallo rubberman,

es sind zweistellige Elemente in der Form: " 1", "02" oder eben "21" etc. pp.
Es ist der Tag und die Uhrzeit einer Datei.
Tag : AT1d
Stunde: At1h
Minute: At1m

Und da ich zwecks Berechnung diese Logik zweimal brauche, wird es schon interessant, ob ich Zeilen sparen kann
Schließlich will ich mit den Zahlen ja dann weiter rechnen, was nur geht, wenn es halt Zahlen sind.

Na ja, natürlich kann ich auch mit meiner Lösung leben. Es war halt eine Frage, ob es nicht auch einfacher oder
eben auch besser geht.

Gruß
max5moritz
Bitte warten ..
Mitglied: rubberman
24.01.2013, aktualisiert um 23:57 Uhr
Hallo max5moritz.

Etwa so?
01.
for /f "tokens=1,4,5 delims=.: " %%i in ('dir /tc "%timLog%"^|find /i "%txc%"') do ( 
02.
  set /a "AT1d = 100%%i, AT1d %%= 100, AT1h = 100%%j, AT1h %%= 100, AT1m = 100%%k, AT1m %%= 100" 
03.
04.
echo AT1d: --!AT1d!--&echo AT1h: --!AT1h!--&echo AT1m: --!AT1m!--
Grüße
rubberman
Bitte warten ..
Mitglied: max5moritz
25.01.2013, aktualisiert um 19:59 Uhr
@rubberman

Danke, genau das war es, was ich suchte.

Ich hatte zwischenzeitlich diese Lösung erarbeitet:

01.
For /F "tokens=1-5 Delims=.: " %%i in ('dir /tw "%Media2%"^|Find /i ".%oxc%"') Do @( 
02.
	set /A BTdd=1%%i-100 
03.
	set /A BTmm=1%%j-100 
04.
	set /A BTjj=%%k/4*4 
05.
	set /A BT1h=1%%l-100 
06.
	set /A BT1m=1%%m-100 
07.
	if not !BTjj! equ %%k set "BTSJ=no"  
08.
09.
set /A BTGm=(%BT1h%*60)+%BT1m%
Deine gefällt mir jedoch besser. Eine Anleitung habe ich inzwischen auch daraus gemacht. Vielleicht kann es ja jemand noch einmal gebrauchen.

Also herzlichen Dank noch einmal - wieder einen "Fall" gelöst.

Grüße
max5moritz
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
JavaScript
Javascript rechnen mir sehr sehr großen Zahlen (3)

Frage von it4baer zum Thema JavaScript ...

Windows Server
gelöst PS Dateien löschen mit 0kb (4)

Frage von Florian86 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Hyper-V
gelöst Reiner Hyper- V Server oder lieber Rolle (21)

Frage von Winuser zum Thema Hyper-V ...

Exchange Server
Bestehende eMails autoamatisch weiterleiten (21)

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

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 ...