Datums-Ausgabe ohne vorangestellte Nullen
Hallo,
Ich bin hier noch neu und hoffe ich mache bei meinem ersten Thread nichts falsch ;)
Ich möchte gern das heutige Datum ohne vorangestellter Null ausgegeben haben.
Das heisst gebe ich
set xyz=%date:~-12,2%
echo %xyz%
ein, will ich nicht das wie zb. heute "09" ausgegeben wird, sondern nur "9". Ist das machbar ?
Hintergrund des ganzen ist, das ich eine kleine Rechnung erstellen will was dann wie folgt aussehen soll
@echo off
set xyz=%date:~-12,2%
ping -n 3 127.0.0.1 >nul
set a=%xyz%
set b=1
set /a gesamt=%a%-%b%
echo Ergebnis ist %gesamt%
pause > nul
Bitte helft einem armen Unwissenden.
MfG Landstreicher
Ich bin hier noch neu und hoffe ich mache bei meinem ersten Thread nichts falsch ;)
Ich möchte gern das heutige Datum ohne vorangestellter Null ausgegeben haben.
Das heisst gebe ich
set xyz=%date:~-12,2%
echo %xyz%
ein, will ich nicht das wie zb. heute "09" ausgegeben wird, sondern nur "9". Ist das machbar ?
Hintergrund des ganzen ist, das ich eine kleine Rechnung erstellen will was dann wie folgt aussehen soll
@echo off
set xyz=%date:~-12,2%
ping -n 3 127.0.0.1 >nul
set a=%xyz%
set b=1
set /a gesamt=%a%-%b%
echo Ergebnis ist %gesamt%
pause > nul
Bitte helft einem armen Unwissenden.
MfG Landstreicher
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 63341
Url: https://administrator.de/forum/datums-ausgabe-ohne-vorangestellte-nullen-63341.html
Ausgedruckt am: 25.12.2024 um 15:12 Uhr
21 Kommentare
Neuester Kommentar
Hallo,
wenn es nur um die Tagesangabe geht, so z. B. ?
wenn es nur um die Tagesangabe geht, so z. B. ?
set xyz=%date:~0,2%
if "%xyz:~0,1%"=="0" set xyz=%xyz:~1,1%
echo %xyz%
Moin Landstreicher,
am einfachsten dadurch, dass du wieder eine dreistellige Zahl daraus machst und diesem dreistelligen String die letzten beiden Stellen nimmst.
Grüße
Biber
am einfachsten dadurch, dass du wieder eine dreistellige Zahl daraus machst und diesem dreistelligen String die letzten beiden Stellen nimmst.
REM wenn %Tag% erwartungsgemäß irgendetwas zwischen 1 und 31 ist:
set /a tag+=100
REM ...oder auch "..+=270000"
echo %tag:~-2%
REM Ausgabe wäre dann "01"..."09"...."22"..."31"--->immer zweistellig.
Grüße
Biber
Ich hätte für die Datumsgeschichte mal einen anderen Ansatz: Man rechnet das Datum um auf den Tag des Jahres (DoY). ;)
Beispiel, ohne Überprüfung der Eingabe und ohne Schaltjahr. Ohne Parameterübergabe wird das Tagesdatum im deutschen Kurzformat Format tt.mm.jj Man nennt das Verzeichnis dann z. B. heute, am 10.7.07 07-181.
Beispiel, ohne Überprüfung der Eingabe und ohne Schaltjahr. Ohne Parameterübergabe wird das Tagesdatum im deutschen Kurzformat Format tt.mm.jj Man nennt das Verzeichnis dann z. B. heute, am 10.7.07 07-181.
@echo off & setlocal
set datum=%date%
if not "%1"=="" set datum=%1
echo %datum%
set M0=0
set M1=31
set M2=28
set M3=31
set M4=30
set M5=31
set M6=30
set M7=31
set M8=31
set M9=30
set M10=30
set M11=30
set doy=0
set var=0
set Tag=%datum:~0,2%
set mon=%datum:~3,2%
set jah=%datum:~-2%
set /a mon=%mon%-1
rem set tag
rem set mon
rem set jah
for /L %%a in (0, 1, %mon%) do call :rechnen %%a
set /a doy=%doy%+%tag%
echo Am %datum% ist der %doy%. Tag des Jahres
pause
rem
rem Hier dann die entsprechende gewünschte Aktion ausführen lassen.
rem
goto :eof
:rechnen
set var=%1
set varm=M%var%
rem set var
rem set varm
set /a doy=%doy%+%varm%
... oder man spart sich die ganzen Scherze und verwendet (temporär) eine Programmiersprache, die mit Datumswerten umgehen kann.
Vor einiger Zeit war einmal "gestern" gefragt:
Wenn's nun doch nicht "gestern" (also von heute aus -1 Tag) sein soll, die Zeile 2 entsprechend ändern ...
Grüße
bastla
Vor einiger Zeit war einmal "gestern" gefragt:
@echo off & setlocal
set TDiff=-1
set "gTemp=%Temp%\Gestern.vbs"
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%"
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i
del "%gTemp%"
echo %G%
Grüße
bastla
Dir ist aber schon klar, dass Scriptsprachen wie vbs und wsh ein potentielles Sicherheitsrisiko darstellen, wenn die Rechner ins Netz gehen und die Anwender nicht sehr restriktiv mit ihren Rechten umgehen?
Hallo, Bastla,
zum Bleistift. ;) Ich habe ihn z. B. nicht installiert, und die vbscript.dll ist auch nicht vorhanden. Mir fehlt nichts, ich hatte auch noch nie was, was ich garnicht haben wollte.
Aber das kann selbstverständlich jeder so handhaben, wie er es für richtig hält.
Gruß
zum Bleistift. ;) Ich habe ihn z. B. nicht installiert, und die vbscript.dll ist auch nicht vorhanden. Mir fehlt nichts, ich hatte auch noch nie was, was ich garnicht haben wollte.
Aber das kann selbstverständlich jeder so handhaben, wie er es für richtig hält.
Gruß
Moin Landstreicher,
Hmmja.. nicht dass ich ich bastla den Spaß am Batch-verfeinern nicht gönne, aber...
1. Von DelAge32 gibt es grad eine frische Version... und auch die älteren sollten "das können"
2. Und vielleicht ist ja auch nicht DelAge das passendste Werkzeug, sonder das Tool WasFile.exe von der gleichen Site Horst Schaeffers Software Pages.
Grüße
Biber
delage löscht nicht alles und diese Ordner enthalten unterverzeichnisse und dateien.
Hmmja.. nicht dass ich ich bastla den Spaß am Batch-verfeinern nicht gönne, aber...
1. Von DelAge32 gibt es grad eine frische Version... und auch die älteren sollten "das können"
2. Und vielleicht ist ja auch nicht DelAge das passendste Werkzeug, sonder das Tool WasFile.exe von der gleichen Site Horst Schaeffers Software Pages.
Grüße
Biber
Hallo Landstreicher!
Mit dem von Biber vorgeschlagenen Tool würde sich das Ganze etwa so darstellen:
Solange das "echo" vor dem "rd" steht, wird der jeweilige Löschbefehl nur angezeigt. Die "wasfile.exe" muss entweder in einem der im %path% aufscheinenden Verzeichnisse liegen oder es muss der vollständige Pfad angegeben werden, also etwa "C:\Utils\WasFile".
Als Variante ohne externes Tool (und auch ohne VBS) könntest Du zB auch ganz einfach die 7 neuesten Verzeichnisse behalten und den Rest entsorgen:
Grüße
bastla
Mit dem von Biber vorgeschlagenen Tool würde sich das Ganze etwa so darstellen:
@echo off
pushd "D:\Backups"
for /f "delims=" %%i in ('dir /b /ad') do WasFile "%%i" modified before today-6 && echo rd /s /q "%i"
popd
Als Variante ohne externes Tool (und auch ohne VBS) könntest Du zB auch ganz einfach die 7 neuesten Verzeichnisse behalten und den Rest entsorgen:
@echo off
pushd "D:\Backups"
for /f "skip=7 delims=" %%i in ('dir /b /ad /o-d') do echo rd /s /q "%i"
popd
Grüße
bastla
Moin bastla,
Fussnote zur ersten Lösung:
Da es sich nur auf die erste Verzeichnisebene bezieht/beziehen darf, wäre kürzer:
Fussnote zur zweiten Lösung:
Da würde ich aber (ängstlich, wie ich bin) dem DIR eine Wildcard-Maske mitgeben, damit auch nur alle Verzeichnisse mit der Namenskonvention z.B "200?-??-??" erwischt werden.
Grüße
Biber
Fussnote zur ersten Lösung:
Da es sich nur auf die erste Verzeichnisebene bezieht/beziehen darf, wäre kürzer:
...pushD...
for %%i in (*) do WasFile.....
PopD
Fussnote zur zweiten Lösung:
Da würde ich aber (ängstlich, wie ich bin) dem DIR eine Wildcard-Maske mitgeben, damit auch nur alle Verzeichnisse mit der Namenskonvention z.B "200?-??-??" erwischt werden.
..
for /f "skip=7 delims=" %%i in ('dir /b /ad /o-d 200?-??-??') DO...
..
Grüße
Biber
@Biber
Ich war beim ersten Ansatz noch "ängstlicher" und wollte zumindest auf jeden Fall Dateien ausschließen (obwohl sich auch dort - zusätzlich - eine Maske nach dem von Dir gezeigten Schema anbieten würde).
Zum Punkt 2: Sicher besser so ...
Grüße
bastla
Ich war beim ersten Ansatz noch "ängstlicher" und wollte zumindest auf jeden Fall Dateien ausschließen (obwohl sich auch dort - zusätzlich - eine Maske nach dem von Dir gezeigten Schema anbieten würde).
Zum Punkt 2: Sicher besser so ...
Grüße
bastla
Hallo Landstreicher!
Das zweite Ergebnis sollte natürlich anders aussehen ...
Der "dir /o-d"-Befehl sortiert absteigend nach Änderungsdatum (verwendet also nicht den Namen des Ordners, sondern die Dateisysteminformation) - wie sieht es aus, wenn Du im Explorer nach Datum sortierst?
Du könntest auch nach Erstellungsdatum ordnen - dazu müsste zusätzlich der Schalter "/tc" für den "dir"-Befehl verwendet werden.
Wenn alle Ordner nach der Namenskonvention "JJJJ-MM-TT" benannt sind, könnte auch "/o-d" durch "/o-n" ersetzt und nach Namen absteigend sortiert werden.
Grüße
bastla
... zeigt er mir nichts an
Wäre ok, es sollen ja die letzten 7 Sicherungen behalten (und daher von den 6 vorhandenen keine gelöscht) werden.Das zweite Ergebnis sollte natürlich anders aussehen ...
Der "dir /o-d"-Befehl sortiert absteigend nach Änderungsdatum (verwendet also nicht den Namen des Ordners, sondern die Dateisysteminformation) - wie sieht es aus, wenn Du im Explorer nach Datum sortierst?
Du könntest auch nach Erstellungsdatum ordnen - dazu müsste zusätzlich der Schalter "/tc" für den "dir"-Befehl verwendet werden.
Wenn alle Ordner nach der Namenskonvention "JJJJ-MM-TT" benannt sind, könnte auch "/o-d" durch "/o-n" ersetzt und nach Namen absteigend sortiert werden.
Grüße
bastla