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

Probleme beim Auslesen einer Umgebungsvariablen

Frage Entwicklung Batch & Shell

Mitglied: lobotomie

lobotomie (Level 1) - Jetzt verbinden

25.04.2006, aktualisiert 26.04.2006, 7867 Aufrufe, 3 Kommentare

Hallo liebe Leute,
ich schreibe gerade an einer Batchdatei zum Löschen von Logfiles, die in Ordnern abgelegt sind deren Namen nach Datum vergeben wird (YYYYMMDD). Hierzu benutze ich das Shareware-Tool XSET.

Ich habe schon hinbekommen, wie ich das Datum Umformatieren kann, dieses schreibe ich in eine Umgebungsvariable und kann es auch wieder auslesen. Mein Problem ist nun, dass ich in einer FOR Schleife den Dateinamen mit dem aktuellen Datum (dem aus der Umgebungsvariable) vergleiche und den Unterschied wiederum in einer Umgebungsvariablen speichere. Nur leider kommt beim Auslesen nicht das raus, was drinstehen sollte.

Hier mein Code :

@echo off
REM Fülle die Variable _dat mit dem aktuellen Datum in der Form YYYYMMDD
call XSET32 _dat DATE YYYYMMDD
REM Danach wechsle ins Verzeichnis für die Logfiles
C:
cd \history
REM Suche nach allen Verzeichnissen in C:\history
for /D %%t in (*) do (
REM Vergleiche aktuellen Verzeichnisnamen mit Datum in _dat auf Tagesbasis
CALL XSET32 _DIFF DIFFDATE %%t %_dat%
REM Dies ist zu Debugzwecken
set
pause
REM Debugende
REM Wenn Alter des Logverzeichnisses grösser als 10 Tage dann Löschen
if "%_DIFF%" GEQ 10 (
:: del /Q .\%%t\*.*
echo Verzeichnis wird geloescht, weil %_DIFF% aelter als 10 Tage
) else (
echo Verzeichnis wird nicht geloescht, weil %_DIFF% juenger als 10 Tage
)
)


Wie Ihr sehen könnt lasse ich mir innerhalb der Schleife den Wert aller Variablen ausgeben.
In dieser Ausgabe steht der Wert für _DIFF auch korrekt drin, nur beim Auslesen in der IF Abfrage kommt der Wert an, der vor Aufruf des Skripts in der Variablen stand (Leer, wenn sie nicht definiert war).

Ich hoffe Ihr könnt mir helfen und danke schon einmal im Voraus.
Mitglied: Biber
25.04.2006 um 20:04 Uhr
Moin lobotomie,

such mal hier über der Forumssuche noch "DelayedExpansion".
Da findest Du die Herleitung und die Workarounds zu diesem Feature/diesem Effekt.

Ein möglicher Workaround kurz skizziert:
01.
.... 
02.
... 
03.
for /D %%t in (*) do  call :Diffdate %%t  
04.
goto :eof 
05.
:DiffDate 
06.
REM Vergleiche aktuellen Verzeichnisnamen mit Datum in _dat auf Tagesbasis 
07.
CALL XSET32 _DIFF DIFFDATE %1 %_dat% 
08.
REM Dies ist zu Debugzwecken ======= 
09.
set 
10.
pause 
11.
REM Debugende ====================== 
12.
REM Wenn Alter des Logverzeichnisses grösser als 10 Tage dann Löschen 
13.
REM ---------> so kann der Vergleich nicht passen!!!! --->>> if "%_DIFF%" GEQ 10 ( 
14.
if [%_DIFF%] GEQ [10] ( 
15.
REM ##noch nicht scharf### del /Q .\%1\*.* 
16.
echo Verzeichnis .\%1 wird geloescht, weil %_DIFF% aelter als 10 Tage 
17.
) else ( 
18.
echo Verzeichnis wird nicht geloescht, weil %_DIFF% juenger als 10 Tage 
19.
20.
 
--> Aber: such auch mal nach dem Thema: "Alle Dateien älter als x Tage löschen" oder so hier im Forum oder auch nach der "DelAge32.exe". Die habe ich schon mehrfach hier empfohlen.

Diesen XSET-Krams brauchst Du eigentlich auch nicht mehr, wenn Du nicht grad noch auf einem Win98-Rechner rumschrapelst...

Hope That Helps
Biber
Bitte warten ..
Mitglied: lobotomie
26.04.2006 um 15:07 Uhr
geht Supi...

nun muss ich nur noch herausbekommen, warum

if [%_DIFF%] GEQ [10] (

einen Stringvergleich macht. (2 > 10 ist wahr).

Vorläufig habe ich mir beholfen, indem ich vorm if-Vergleich die Zeile

set /A _DIFF = %_DIFF% +1000

einfüge und gegegen 1010 vergleiche. (Pragmatisch, aber geht)

Ich habe mir im Übrigen mal delage32.exe angesehen.
Ist sicher ausreichend für meine Bedürfnisse aber ich kann mir gut vorstellen,
dass mein Code für einige Leute auch sehr nützlich sein kann, da ich mich auf
den Dateinamen und weder auf das Erstellungsdatum noch auf das Bearbei-
tungsdatum beziehe.

Vielen Dank trotzdem

Lobo
Bitte warten ..
Mitglied: Biber
26.04.2006 um 15:30 Uhr
Moin lobo,

wenn Du sicherstellen kannst (also vorher prüfst), dass %_DIFF% nicht leer ist, dann kannst du auch einen Zahlenwert-Vergleich machen:

if %_DIFF% GEQ 10 ( .....blafasel...

ich hatte nur die []-Begrenzer drumherum gesetzt, weil es bei leerer %_DIFF%-Variable sonst einen Syntax-Error gäbe.
if %_DIFF% GEQ 10 ( ..blablubb... <---bei nicht definierter %_DIFF% --Crash & Burn

Aber "mein" Vergleich ich natürlich dadurch ein String-Vergleich geworden.

Nimm Du lieber den numWert-nunWert-Vergleich.
if %_DIFF% GEQ 10 ( ....sülzdibülz....

Gruß
Biber
Bitte warten ..
Ähnliche Inhalte
Windows 7
Umgebungsvariablen werden abgeschnitten
Frage von tuCsen86Windows 72 Kommentare

Hallo zusammen, ich habe ein Problem mit einem User und kenne mich auf dem Gebiet nicht so gut aus. ...

Batch & Shell
Dauerhaftes ersetzen in der Umgebungsvariable Path
gelöst Frage von busteronBatch & Shell9 Kommentare

Hallöchen, ich hab mal wieder eine Frage! Wie kann man dauerhaft einen einen Wert in der Umgebungsvariable "Path" ersetzen ...

Batch & Shell
Bash Umgebungsvariable PATH Splitten
gelöst Frage von MarabuntaBatch & Shell1 Kommentar

Hallo, ich möchte die Pfade, welche in der Umgebungsvariable angegeben sind überprüfen. Ergibt: /root/bin:/usr/local/sbin:/usr/local/bin:/opt/csw/bin:/usr/sbin:/usr/bin:/SAMPLEPATH/bin Das schlägt immer fehl, weil ...

Windows Server
Änderung Umgebungsvariable per GPO
gelöst Frage von CoreknabeWindows Server4 Kommentare

Moin, immer wieder ein Spaß: Der monatliche Patchday für Windows 7. Bei uns haben jetzt sämtliche Win7-Rechner das Update ...

Neue Wissensbeiträge
DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 StundenDSL, VDSL

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 2 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 5 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...