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

Datums-Ausgabe ohne vorangestellte Nullen

Frage Entwicklung Batch & Shell

Mitglied: Landstreicher

Landstreicher (Level 1) - Jetzt verbinden

09.07.2007, aktualisiert 13.07.2007, 4335 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.
Mit freundlichen Grüßen 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?

Mit freundlichen Grüßen 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 ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Windows Server
Windows Remote App - Ausgabe in lokales Office (1)

Frage von fluluk zum Thema Windows Server ...

Python
Python - ausgabe formatieren

Frage von BadFsaadKl zum Thema Python ...

Batch & Shell
gelöst Batch ausgabe zeilenweise stat spaltenweise ausgeben (4)

Frage von sugram zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - Formatierung der Ausgabe (2)

Frage von Scroller zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...