landstreicher
Goto Top

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

Content-Key: 63341

Url: https://administrator.de/contentid/63341

Printed on: April 24, 2024 at 13:04 o'clock

Mitglied: 50496
50496 Jul 09, 2007 at 10:36:17 (UTC)
Goto Top
Hallo,

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%
Member: Biber
Biber Jul 09, 2007 at 11:53:41 (UTC)
Goto Top
Moin Landstreicher,

willkommen im Forum.

...oder aber Du schreibst es als eine Zeile:
set /a gesamt=1%date:~-12,2% -101

Gruß
Biber
Member: Landstreicher
Landstreicher Jul 09, 2007 at 11:53:47 (UTC)
Goto Top
genau so meinte ich das.

danke für die schnelle hilfe ;)
Member: Landstreicher
Landstreicher Jul 09, 2007 at 11:56:32 (UTC)
Goto Top
Danke Biber face-wink

bleibt mir nur noch das problem das ich nun alle erstellten ordner in die ab heute über 7 tage alt sind gelöscht werden.
leider ging das mit delage nicht sauber, am ende standen noch einige leere ordner rum face-sad
na mal sehen ob ich das auch noch hin bekomme.
Member: Landstreicher
Landstreicher Jul 10, 2007 at 06:32:41 (UTC)
Goto Top
Guten Morgen,

ich habe noch eine frage. ... kann man die null auch wieder hinzufügen ?

gruß landstreicher
Member: Biber
Biber Jul 10, 2007 at 06:50:45 (UTC)
Goto Top
Moin Landstreicher,

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
Member: Landstreicher
Landstreicher Jul 10, 2007 at 07:40:37 (UTC)
Goto Top
Moin Biber,

soweit so gut, leider ist wieder alles imi Sande verlaufen (bin leider nicht so helle was das angeht) face-sad

mein ziel war es immer vom aktuellen tag -6 zu rechnen und alles was älter als 6 tage ist zu löschen. wie gesagt da gibts nen tolles tool "delage" aber leider löscht das nicht alles trotz richtiger einstellungen bleiben ordner bestehen.

meine sicherungsordner heissen "2007-07-10" mein ansatz war folgender:
(Problem er rennt dann in den minusbereich)

@echo off
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CYear=%%c
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CMont=%%b
FOR /F "tokens=1,2,3,4,5 delims=/. " %%a in ('date/T') do set CDAYY=%%a
Echo Originalzeit
echo %CYear%
echo %CMont%
echo %CDAYY%
if "%CMont:~0,1%"=="0" goto :setmon
if not "%CMont:~0,1%"=="0" goto :nosetmon
:setmon
set CMont=%CMont:~1,1%
if "%CDAYY:~0,1%"=="0" goto :setday
if not "%CDAYY:~0,1%"=="0" goto :nosetday
:setday
set CDAYY=%CDAYY:~1,1%

:nosetmon
Echo Monat war mit Null
:nosetday
Echo Tag war mit Null

echo %CYear%
echo %CMont%
echo %CDAYY%


::-------------------------------------------------------------------------------------

:Counter
set counter=0
set maxcount=7

:Run
set /a counter=%counter% + 1
if "%counter%" EQU "%maxcount%" goto :End

ping -n 1 localhost >nul
goto :Runnext

:Runnext

set a=%CDAYY%
set b=%counter%

set /a gesamt=%a%-%b%

if "%gesamt%"=="1" set gesamt=01
if "%gesamt%"=="2" set gesamt=02
if "%gesamt%"=="3" set gesamt=03
if "%gesamt%"=="4" set gesamt=04
if "%gesamt%"=="5" set gesamt=05
if "%gesamt%"=="6" set gesamt=06
if "%gesamt%"=="7" set gesamt=07
if "%gesamt%"=="8" set gesamt=08
if "%gesamt%"=="9" set gesamt=09
echo day of copy %gesamt%

goto :RUN

:end

wie sage ich ihm nun, des es im monat nur 28, 20 oder 31 tage gibt ?
ich hoffe das ist nicht zu viel verlang und evt. kann man mein riesen geschreibsel auch vereinfachen?

mfg landstreicher (hab heute viel gestrichen ... wird schon alles grau draussen face-smile )
Mitglied: 50496
50496 Jul 10, 2007 at 09:57:21 (UTC)
Goto Top
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.

@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%
Member: bastla
bastla Jul 10, 2007 at 14:42:16 (UTC)
Goto Top
... 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:
@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%
Wenn's nun doch nicht "gestern" (also von heute aus -1 Tag) sein soll, die Zeile 2 entsprechend ändern ...

Grüße
bastla
Mitglied: 50496
50496 Jul 10, 2007 at 14:49:27 (UTC)
Goto Top
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? face-wink
Member: bastla
bastla Jul 10, 2007 at 15:01:25 (UTC)
Goto Top
Hallo ernstaugust!

Du würdest also davon ausgehen, dass Anwender, die nicht sehr restriktiv mit ihren Rechten umgehen, den WSH deaktiviert haben und daher meine angebotene Lösung nicht verwenden können? face-wink

Grüße
bastla
Mitglied: 50496
50496 Jul 10, 2007 at 15:06:25 (UTC)
Goto Top
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. face-big-smile

Aber das kann selbstverständlich jeder so handhaben, wie er es für richtig hält.

Gruß
Member: Landstreicher
Landstreicher Jul 11, 2007 at 09:39:06 (UTC)
Goto Top
... 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:
@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%
> 
Wenn's nun doch nicht
"gestern" (also von heute aus -1
Tag) sein soll, die Zeile 2 entsprechend
ändern ...

Grüße
bastla

Hallo Bastla,

mein erstes Problem habe ich gelöst, wenn auch nicht unbedingt sauber, aber es läuft.
nun zu deinem Script... ist es möglich, das du mir das so umbaust, das er alle Ordner
die ab heute 2007-07-11 7.Tage alt sind löscht?

PS: delage löscht nicht alles und diese Ordner enthalten unterverzeichnisse und dateien.
Member: Biber
Biber Jul 11, 2007 at 12:26:30 (UTC)
Goto Top
Moin Landstreicher,
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
Member: bastla
bastla Jul 11, 2007 at 13:15:56 (UTC)
Goto Top
Hallo Landstreicher!

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
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:
@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
Member: Biber
Biber Jul 11, 2007 at 14:14:25 (UTC)
Goto Top
Moin bastla,

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
Member: bastla
bastla Jul 11, 2007 at 14:25:47 (UTC)
Goto Top
@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
Member: Landstreicher
Landstreicher Jul 12, 2007 at 14:47:06 (UTC)
Goto Top
Moin Männers face-wink

so ganz steige ich da jetzt nicht durch.
ich habe momentan 6 Ordner im Verzeichnis:
2007-07-12
2007-07-11
2007-07-10
2007-07-09
2007-07-08
2007-07-06
(2007-07-07 war ein Samstag und da wird bei mir nicht gesichert face-wink )

führe ich nun

@echo off
pushd "Z:\Sicherung\SAP_DEL_4"
for /f "skip=7 delims=" %%i in ('dir /b /ad /o-d') do echo rd /s /q "%%i"
popd

aus, zeigt er mir nichts an face-sad

setze ich skip aber auf 2 zeigt er mir die ordner in folgender reihenfolge an
2007-07-10
2007-07-11
2007-07-12
2007-07-06

ähh ich glaub ich werde noch irre

gruß landstreicher
Member: bastla
bastla Jul 12, 2007 at 15:09:29 (UTC)
Goto Top
Hallo Landstreicher!

... 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
Member: Landstreicher
Landstreicher Jul 13, 2007 at 09:53:45 (UTC)
Goto Top
Hey bastla,

danke für den tipp, nachdem ich for /o-d und /tc gesetzt hatte war die ausgabe richtig.

for /f "skip=3 delims=" %%i in ('dir /b /ad /o-d /tc') do echo rd /s /q "%%i"

merci face-wink

jetzt noch eine andere frage, die gehört hier zwar nicht zum thema, aber gibt es eine möglichkeit die standart zip-funktion von windows xp zum zippen per batch zu nutzen ?

bei winrar geht das mit:
C:\Programme\WinRAR\rar.exe u "G:\ChecklistenBackup\Arch-Stand.rar" "D:\SAP_DEL_4\Public\Archivierung-DKS\Arch-Stand.xls" -uf -sfx

ich frage deshalb, weil winrar ja eigentlich nicht kostenlos ist, sofern man es nicht privat nutzt.

gruß landstreicher
Member: Biber
Biber Jul 13, 2007 at 10:50:15 (UTC)
Goto Top
Nö, landstreicher,

so machen wir das nicht...

Bitte mache für die neue Frage einen neuen Beitrag auf.
Sonst kann weder Frage noch Lösung jemals wiedergefunden werden.

Dieser Beitrag hier - das beschließe ich jetzt mal - ist "gelöst" und "geschlossen".

Schönes Wochenende
Biber