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

Datums-Ausgabe ohne vorangestellte Nullen

Frage Entwicklung Batch & Shell

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

09.07.2007, aktualisiert 13.07.2007, 4381 Aufrufe, 21 Kommentare

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
Mitglied: 50496
09.07.2007 um 12:36 Uhr
Hallo,

wenn es nur um die Tagesangabe geht, so z. B. ?

01.
 set xyz=%date:~0,2% 
02.
 if "%xyz:~0,1%"=="0" set xyz=%xyz:~1,1% 
03.
 echo %xyz%
Bitte warten ..
Mitglied: Biber
09.07.2007 um 13:53 Uhr
Moin Landstreicher,

willkommen im Forum.

...oder aber Du schreibst es als eine Zeile:
01.
set /a gesamt=1%date:~-12,2% -101
Gruß
Biber
Bitte warten ..
Mitglied: Landstreicher
09.07.2007 um 13:53 Uhr
genau so meinte ich das.

danke für die schnelle hilfe ;)
Bitte warten ..
Mitglied: Landstreicher
09.07.2007 um 13:56 Uhr
Danke Biber

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
na mal sehen ob ich das auch noch hin bekomme.
Bitte warten ..
Mitglied: Landstreicher
10.07.2007 um 08:32 Uhr
Guten Morgen,

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

gruß landstreicher
Bitte warten ..
Mitglied: Biber
10.07.2007 um 08:50 Uhr
Moin Landstreicher,

am einfachsten dadurch, dass du wieder eine dreistellige Zahl daraus machst und diesem dreistelligen String die letzten beiden Stellen nimmst.

01.
REM wenn %Tag% erwartungsgemäß irgendetwas zwischen 1 und 31 ist: 
02.
set /a tag+=100  
03.
REM ...oder auch "..+=270000" 
04.
echo %tag:~-2%  
05.
REM Ausgabe wäre dann "01"..."09"...."22"..."31"--->immer zweistellig.
Grüße
Biber
Bitte warten ..
Mitglied: Landstreicher
10.07.2007 um 09:40 Uhr
Moin Biber,

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

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 )
Bitte warten ..
Mitglied: 50496
10.07.2007 um 11:57 Uhr
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.

01.
@echo off & setlocal 
02.
set datum=%date% 
03.
if not "%1"=="" set datum=%1 
04.
echo %datum%  
05.
 
06.
set M0=0 
07.
set M1=31 
08.
set M2=28 
09.
set M3=31 
10.
set M4=30 
11.
set M5=31 
12.
set M6=30 
13.
set M7=31 
14.
set M8=31 
15.
set M9=30 
16.
set M10=30 
17.
set M11=30 
18.
set doy=0 
19.
set var=0 
20.
set Tag=%datum:~0,2% 
21.
set mon=%datum:~3,2% 
22.
set jah=%datum:~-2% 
23.
set /a mon=%mon%-1 
24.
rem set tag 
25.
rem set mon 
26.
rem set jah 
27.
 
28.
for /L %%a in (0, 1, %mon%) do call :rechnen %%a 
29.
set /a doy=%doy%+%tag% 
30.
echo Am %datum% ist der %doy%. Tag des Jahres  
31.
pause 
32.
 
33.
rem  
34.
rem  Hier dann die entsprechende gewünschte Aktion ausführen lassen. 
35.
rem  
36.
 
37.
goto :eof 
38.
 
39.
:rechnen 
40.
set var=%1 
41.
set varm=M%var% 
42.
 
43.
rem set var 
44.
rem set varm 
45.
set /a doy=%doy%+%varm%
Bitte warten ..
Mitglied: bastla
10.07.2007 um 16:42 Uhr
... 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:
01.
@echo off & setlocal 
02.
set TDiff=-1 
03.
set "gTemp=%Temp%\Gestern.vbs" 
04.
echo g=DateAdd("d",%TDiff%,Date):WScript.Echo Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%" 
05.
for /f %%i in ('cscript //nologo "%gTemp%"') do set G=%%i 
06.
del "%gTemp%" 
07.
echo %G%
Wenn's nun doch nicht "gestern" (also von heute aus -1 Tag) sein soll, die Zeile 2 entsprechend ändern ...

Grüße
bastla
Bitte warten ..
Mitglied: 50496
10.07.2007 um 16:49 Uhr
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?
Bitte warten ..
Mitglied: bastla
10.07.2007 um 17:01 Uhr
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?

Grüße
bastla
Bitte warten ..
Mitglied: 50496
10.07.2007 um 17:06 Uhr
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ß
Bitte warten ..
Mitglied: Landstreicher
11.07.2007 um 11:39 Uhr
... 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:
01.
@echo off & setlocal 
02.
> set TDiff=-1 
03.
> set "gTemp=%Temp%\Gestern.vbs" 
04.
> echo 
05.
> g=DateAdd("d",%TDiff%,Date):WScript.Echo 
06.
> Right(g,4)^&"-"^&Mid(g,4,2)^&"-"^&Left(g,2)>"%gTemp%" 
07.
> for /f %%i in ('cscript //nologo 
08.
> "%gTemp%"') do set G=%%i 
09.
> del "%gTemp%" 
10.
> echo %G% 
11.
> 
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.
Bitte warten ..
Mitglied: Biber
11.07.2007 um 14:26 Uhr
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
Bitte warten ..
Mitglied: bastla
11.07.2007 um 15:15 Uhr
Hallo Landstreicher!

Mit dem von Biber vorgeschlagenen Tool würde sich das Ganze etwa so darstellen:
01.
@echo off 
02.
pushd "D:\Backups" 
03.
for /f "delims=" %%i in ('dir /b /ad') do WasFile "%%i" modified before today-6 && echo rd /s /q "%i" 
04.
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:
01.
@echo off 
02.
pushd "D:\Backups" 
03.
for /f "skip=7 delims=" %%i in ('dir /b /ad /o-d') do echo rd /s /q "%i" 
04.
popd
Grüße
bastla
Bitte warten ..
Mitglied: Biber
11.07.2007 um 16:14 Uhr
Moin bastla,

Fussnote zur ersten Lösung:
Da es sich nur auf die erste Verzeichnisebene bezieht/beziehen darf, wäre kürzer:
01.
 ...pushD... 
02.
for %%i in (*) do WasFile..... 
03.
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.
01.
.. 
02.
for /f "skip=7 delims=" %%i in ('dir /b /ad /o-d 200?-??-??') DO... 
03.
..
Grüße
Biber
Bitte warten ..
Mitglied: bastla
11.07.2007 um 16:25 Uhr
@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
Bitte warten ..
Mitglied: Landstreicher
12.07.2007 um 16:47 Uhr
Moin Männers

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 )

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

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
Bitte warten ..
Mitglied: bastla
12.07.2007 um 17:09 Uhr
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
Bitte warten ..
Mitglied: Landstreicher
13.07.2007 um 11:53 Uhr
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

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
Bitte warten ..
Mitglied: Biber
13.07.2007 um 12:50 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Inhaltsverzeichnis mit vorangestellten Seitenzahlen
Frage von coccinelleMicrosoft Office

Hallo zusammen, ich quäle mich schon den ganzen Tag mit folgendem Problem herum: Unser Corporate Design Manual schreibt für ...

Batch & Shell
Wieso ist die Catch Ausgabe ohne ausgabe der Variable?
gelöst Frage von pixel0815Batch & Shell10 Kommentare

Hallo zusammen, weshalb wird nicht die Variable $_.Hostname mit dem betreffenden nicht vorhandenen Record angezeigt? Ich erhalte immer Kein ...

Microsoft Office
OneNote findet keine Texte, denen direkt eine Ziffer vorangestellt ist?
Frage von drobskindMicrosoft Office1 Kommentar

Hallo, ich habe bei meinem OneNote ein merkwürdiges Problem. Wenn ich einen Text habe, dem eine Ziffer vorangestellt ist, ...

Batch & Shell
Führende Nullen hinzufügen
gelöst Frage von Erik72Batch & Shell6 Kommentare

Hallo ihr Lieben, ich habe folgendes Script und wünsche führende Nullen bei der Ausgabe. Kann mir bitte jemand helfen? ...

Neue Wissensbeiträge
Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 2 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 2 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 14 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Verschlüsselung & Zertifikate

19 Jahre alter Angriff auf TLS funktioniert immer noch

Information von BassFishFox vor 20 StundenVerschlüsselung & Zertifikate1 Kommentar

Interessant zu lesen. Der Bleichenbacher-Angriff gilt unter Kryptographen als Klassiker, trotzdem funktioniert er oft noch. Wie wir herausgefunden haben, ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
NAS über zwei weitere Ethernet Anschlüsse verbinden
gelöst Frage von Sibelius001Netzwerkmanagement17 Kommentare

Sorry - ich bin hier wahrscheinlich als kompetter IT Trottel unterwegs. Aber eventuell kann mir jemand ganz einfach helfen: ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...