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, 4313 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst Führende Nullen hinzufügen (6)

Frage von Erik72 zum Thema Batch & Shell ...

Visual Studio
gelöst CSharp Bereiche von Listen von Zahlen ausgeben (1)

Frage von Aicher1998 zum Thema Visual Studio ...

Batch & Shell
Batch mit forfiles - Dateiendung filtern - Dateien löschen (2)

Frage von mschaedler1982 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(5)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Windows Server
gelöst Exchange HyperV Prozessorlast (19)

Frage von theoberlin zum Thema Windows Server ...

Windows Server
Server mit Netzwerkaussetzern (18)

Frage von SarekHL zum Thema Windows Server ...

Server-Hardware
gelöst SPP von HP Abwärtskompatibel? (14)

Frage von fireskyer zum Thema Server-Hardware ...

Netzwerke
Vorschlag Hotelverkabelung (14)

Frage von FA-jka zum Thema Netzwerke ...