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

Erstelldatum einer Datei per Batch ausgeben

Frage Entwicklung Batch & Shell

Mitglied: Noobstar0815

Noobstar0815 (Level 1) - Jetzt verbinden

26.04.2013 um 09:49 Uhr, 2413 Aufrufe, 62 Kommentare

Hallo,
ich habe im Internet schon eine Code-Zeile gefunden, allerdings komme ich damit noch nicht ganz klar.

Die Code-Zeile lautet
01.
for /f "delims= " %%a in ('dir c:\spss15\*.exe^|findstr /i /l "spsswin.exe"') do echo %%a
Um das Datum der Datei meines Wunsches zu finden, änderte ich dir c: in dir g: und gab den Pfad an, und "spsswin.exe" änderte ich in *exe.
Leider kommte jedes Mal die Fehlermeldung, dass die Datei nicht gefunden werden kann. Also änderte ich "*.exe" in "Dateiname.exe" ab, leider ohne Erfolg.
Ich hab das Gefühl, dass ich vorne bei dem "delims= " noch etwas einfügen muss, allerdings ist der Code nicht genau beschrieben und ich kenne mich mit dem for-Befehl immer noch nicht aus.

Das ist allerdings nur das eine Problem. Das Andere ist, dass ich das gefundene Datum mit dem heutigen Datum vergleichen möchte, und möchte eine Meldung bekommen von den Dateien die älter als z.B. 30 Tage sind.
Könnt ihr mir bitte helfen dies zu realisieren?
Danke im Vorraus =)
Mit freundlichen Grüßen Noobstar0815
62 Antworten
Mitglied: 106543
26.04.2013 um 09:52 Uhr
Hi,

wenn du eine .exe-Datei überprüfen musst, dann nimmst du "*.exe" wenn´s ne .txt-Datei ist nimmst du "*.txt" etc
wenn du nicht weißt, welche Endung, dann "*.*" ;)

Grüße
Exze
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 09:53 Uhr
Zitat von 106543:
Hi,

wenn du eine .exe-Datei überprüfen musst, dann nimmst du "*.exe" wenn´s ne .txt-Datei ist nimmst du
"*.txt" etc
wenn du nicht weißt, welche Endung, dann "*.*" ;)

Grüße
Exze

Hallo Exzellius, wo genau meinst du das? Also wo soll ich das einfügen?
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 09:57 Uhr
Habe es jetzt mal in
01.
for /f "delims= " %%a in ('dir "g:\Adobe Reader\*.*" /t:c^|findstr /i /l "*.*"') do echo %%a 
geändert. Fehlermeldungen bleiben aus. So wie alle anderen Ausgaben, sprich ich bekomme nichts zurück.
Bitte warten ..
Mitglied: 106543
26.04.2013 um 10:00 Uhr
Hi,

ach du willst das Erstelldatum der Reader.exe oder so auslesen oder ? :D
dann änder dein "*.*" wieder in "*.exe". Was daran aber falsch ist kann ich dir nixht sagen, weil ich nicht sooo viel Anhung von Batchen hab ;) bin aktuell eher mit VB unterwegs.

Viel Glück noch...
Grüße
Exze
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 10:00 Uhr
Erneut geändert, diesmal wird der Pfad gefunden, und ich bekomme 2mal die Ausgabe Datei nicht gefunden. Es ist aber nur eine Datei vorhanden, warum doppelte Fehlermeldung?
01.
for /f "delims= " %%a in ('dir G:\Adobe Reader*.exe /t:c^|findstr /i /l "*.exe"') do echo %%a 
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 10:01 Uhr
Genau, ich möchte das Erstelldatum mit dem heutigen Datum abgleichen um zu sehen wie alt die Datei ist, und ob ich besser mal nach Updates schaue :D
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 10:23 Uhr
Okay, mit einem anderen Code-Schnipsel hab ich jetzt das Datum, jetzt muss ich nur noch schauen dass ich richtig weiter verarbeitet bekomme =)
Bitte warten ..
Mitglied: 106543
26.04.2013 um 10:23 Uhr
Hi Noobstar,

dir scheint nicht ganz klar zu sein, um was es sich bei "*" handelt
Das nennt man Wildcard und d.h. wenn man die z.B. wie bei dir in eine Filertung oder Suche einbaut, wird einfach alle angezeigt bzw. bearbeitet, was den festgelegten Teil im Namen hat d.h. wenn du 3 Dateien hast
Datei1.txt
Datei2.exe
Datei3.txt
und du suchst per Batch nach "Datei*", dann gibt´s dir alle drei aus, wenn du nach Datei*.txt suchst gibt´s dir Datei1 und 3 aus

Von daher muss dein Pfad lauten: G:\Adobe Reader\*.exe
du hast den \ nach Adobe Reader vergessen und was auch wichtig ist, setze den Pfad in Anführungszeichen, weil sonst das Leerzeichen den Pfad zerschießt
also im Endeffekt folgender Pfad: "G:\Adobe Reader\*.exe"

Grüße
Exze

PS: meine Erklärung der Wildcards ist nicht perfekt, vll solltest du dich da nochmal seperat schlau machen
Bitte warten ..
Mitglied: 106543
26.04.2013 um 10:24 Uhr
Zitat von Noobstar0815:
Okay, mit einem anderen Code-Schnipsel hab ich jetzt das Datum, jetzt muss ich nur noch schauen dass ich richtig weiter
verarbeitet bekomme =)

Toll aber ich würde trotzdem empfehlen mit dem alten weiter zu versuchen sonst lernst du nie was, wenn du immer nur Code-Snippets aus dem internet zusammenklaubst, aber keine Ahnung hast, wie sie funktionieren.

Grüße
Exze
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 10:30 Uhr
Hallo Noobstar, hast du dir denn schon überlegt, wie du aus dem Dateidatum und heute die Differenz in Tagen errechnen kannst? So wird es ja nicht gehen:
01.
set /a days=%date%-filedate
Die Lösung hat mit Batch eigentlich nix zu tun.

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 10:31 Uhr
Hey Exze,
das Problem lag weder an den "" noch am fehlendem \, hatte beides ausprobiert (ja auch zusammen) und da kam dann gar keine Ausgabe mehr.
Aktuell sieht mein Code jetzt so aus:
01.
for %%f in ("g:\Java\*") do echo %%f: %%~tf & if %%~tf EQU 
Allerdings weiß ich nicht, wie ich hinter dem EQU weiter machen muss. Es müsste etwas in Richtung
01.
if %%~tf EQU date -30 echo Name_der_Datei ist veraltet
sein, allerdings weiß ich nicht wie ichs schreiben muss.
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013, aktualisiert um 11:32 Uhr
Wie rechne ich überhaupt 30 Tage zurück im Datum? Und wie bekomme ich die Uhrzeit weg?
for /f "delims= " %%f in ("g:\Java\*") do set filedate=%%~tf sollte eigentlich nach einem " " trennen oder was verstehe ich da grade nicht?
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 11:42 Uhr
Die Forschleifenparameter beziehen sich auf den output der Forschleife, nicht deren Variable. Ich weiss auch grad nicht was du mit dem Wildcard in der For-F-Schleife willst.

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013, aktualisiert um 11:55 Uhr
OK, ich habe 7 Ordner, in diesen 7 Ordnern liegt jeweils neu eine Datei. Diese Datei ist z.B. von Java, Adobe Reader etc. und ich möchte per Skript wissen, welche Datei wie alt ist, bzw. ob sie älter als 30 Tage ist, damit ich im Internet schaue, ob es eine neue Version gibt. Deswegen dachhte ich kann ich ruhig mit einer Wildcrard arbeiten. Vorallem weil in manchen Ordnern .exe in anderen hingegen .msi Dateien sind.
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 12:00 Uhr
Natürlich kannst du mit Wildcards arbeiten. Aber nicht in einer For-F-Schleife. Dazu gibts die einfache Forschleife und die For-D- und For-R-Schleife. Wenn du die in der For-F-Schleife verwenden willst, geht das nur über die Kommando-Syntax:
01.
for /f %%i in ('dir *.exe') do echo %%~i
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 12:05 Uhr
Ok werde ich mir merken, allerdings ist die for-Schleife ja nicht das Problem, das Erstelldatum bekomme ich ja ausgelesen, allerdings nicht weiter verarbeitet.
Hätte halt gerne einen if-Befehl wie:
01.
if %filedate% EQU %date%-30 echo %filename% ist veraltet.
Ist dies möglich? Und wo müsste ich die Variable %filename% am besten rausnehmen?
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 12:10 Uhr
Es gibt in Batch keine Funktion, die ein Datum von einem anderen abzieht oder Tage (Wochen, Monate ...) mit einem Datum verrechnet. Das muss zu Fuss erledigt werden. Oder du nimmst Programme, die mit solchen Angaben umgehen können (zB. XCopy, Forfiles, robocopy).

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 12:23 Uhr
Ok, dann etwas anderes, wie genau bekomme ich die Uhrzeit weg?
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 12:53 Uhr
Oder besser : Bekomm ich das Erstelldatum in 3 Variablen zerlegt?
Variable1 26
Variable2 04
Variable3 2013
geht das?
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 13:26 Uhr
Ja, das Datum kannst du mit einer For-F-Schleife zerlegen:
01.
@echo off &setlocal 
02.
set "datum=26.04.2013" 
03.
for /f "tokens=1-3 delims=." %%i in ("%datum%") do set "day=%%i"&set "month=%%j"&set "year=%%k" 
04.
echo %day% %month% %year%
Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 13:38 Uhr
Perfekt, danke =)
Ich arbeite grade trotzdem mal dran, es hinzubekommen, es nur mit Batch zu schaffen :D
Das mit der for-Schleife hat mir ne Menge arbeit gespart :D
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 13:43 Uhr
Ich bräuchte nur noch eine einzige Sache um es hinzubekommen. Wie rechne ich in Batch-Dateien Differenzen zwischen 2 Zahlen aus? Gehen tut es mit Sicherheit, aber wie?
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 13:49 Uhr
Wie im normalen Leben:
01.
@echo off &setlocal 
02.
set /a a=5 
03.
set /a b=3 
04.
set /a c=a-b 
05.
echo %c%
Das steht auch im Hilfetext von "set /?".

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 13:53 Uhr
Das funktioniert leider nur nicht mehr, wenn b > a ist, aber ich trotzdem die Differenz brauchen. Also 3-5 ist -2, die Differenz allerdings ist 2. Heißt ich müsste dann noch das - wegbekommen.
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 13:58 Uhr
Es gibt in Batch keine "ABS"-Funktion. Die musst du mit "if" nachbauen oder die Variable mit "delims=-" durch die Forschleife jagen.

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 13:59 Uhr
Alles klar danke =)
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 14:09 Uhr
Dann noch eine Sache :D Dann solte ich wirklich alles parat haben dafür :D
Du hattest mir grade den Code geschickt, um die Uhrzeit wegzubekommen. Das klappt so weit ganz gut, solange ich das Datum habe (Bei dem Erstellungsdatum bekomm ich es in eine Variable), aber wie schaff ich das mit dem aktuellen Datum?
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 14:21 Uhr
Hey, das ist doch schon in einer Variable. Sie heisst %date%.

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 14:26 Uhr
Hey, das Problem ist nur, wenn ich es so mache:
01.
for /f "tokens=1-3 delims=." %%i in (%date%) do set "day=%%i"&set "month=%%j"&set "year=%%k" 
02.
echo %day% %month% %year%
kommt jedes Mal ein Fehler : "Die Datei Fr kann nicht gefunden werden"
Bitte warten ..
Mitglied: Endoro
26.04.2013 um 14:34 Uhr
Das Datum ist ja auch ein String, kein Dateiname. Ich habs oben anders gemacht :P

Tipp: "for /?"
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 14:39 Uhr
Sorry kann langsam nicht mehr am Bildschirm arbeiten ... Wärst du so freundlich und würdest dich wiederholen?
Drecksmonitor ... ich weiß warum ich diesmal erst alles auf einen Zettel geschrieben habe bevor ich ans Skripten ging ...
Bitte warten ..
Mitglied: Endoro
26.04.2013, aktualisiert um 14:46 Uhr
01.
@echo off &setlocal 
02.
for /f "tokens=1-3 delims=." %%i in ("%date%") do set "day=%%i"&set "month=%%j"&set "year=%%k" 
03.
echo %day% %month% %year%
Dann mach doch mal 'ne Pause. Ich mach auch eine

Gruss!

PS: und immer daran denken: Datum & Zeit sind keine Nummern, sondern Strings. Es wird ausgegeben, was du in der Systemsteuerung eingegeben hast unter Datums-/Zeitformat.
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 14:55 Uhr
Ich mach keine Pause heute ... :D
also so weit bin ich jetzt, es gibt nur noch ein Problem, ich habe vergessen, dass Batch nicht > (größer als) < (kleiner als) kennt, wie kann ich das trotzdem schaffen? :D
01.
for /f "delims= " %%f in ("g:\Java\*") do set filedate=%%~tf 
02.
for /f "tokens=1-5 delims=. " %%i in ("%filedate%") do set "dayf=%%i"&set "monthf=%%j"&set "yearf=%%k" 
03.
 
04.
for /f "tokens=1-5 delims=. " %%i in ("%date%") do set "dayc=%%j"&set "monthc=%%k"&set "yearc=%%l" 
05.
echo %day% %month% %year% 
06.
 
07.
set DEDd=%dayf% 
08.
set DEDm=%monthf% 
09.
set DEDy=%yearf% 
10.
 
11.
set Cd=%dayc% 
12.
set Cm=%monthc% 
13.
set Cy=%yearc% 
14.
 
15.
set dDiv1=0 
16.
set dDiv2=0 
17.
set mDiv1=0 
18.
set mDiv2=0 
19.
set yDiv1=0 
20.
set yDiv2=0 
21.
 
22.
if %DEDd% > %Cd% ( 
23.
	set %dDiv1%=%DEDd%-%Cd% 
24.
) else ( 
25.
	set %dDiv2%=%Cd%-%DEDd% 
26.
27.
 
28.
if %DEDm% > %Cm% ( 
29.
	set %mDiv1%=%DEDm%-%Cm% 
30.
) else ( 
31.
	set %mDiv2%=%Cm%-%DEDm% 
32.
33.
 
34.
if %DEDy% > %Cy% ( 
35.
	set %yDiv1%=%DEDy%-%Cy% 
36.
) else ( 
37.
	set %yDiv2%=%Cy%-%DEDy% 
38.
39.
if NOT mDiv1=0 set mDivd=%mDiv1%*30 
40.
if NOT mDiv2=0 set mDivd=%mDiv2%*30 
41.
if NOT yDiv1=0 set yDivd=%yDiv1%*365 
42.
if NOT yDiv2=0 set yDivd=%yDiv2%*365 
43.
 
44.
 
45.
 
46.
if %DEDy% < %Cy% ( 
47.
	if %DEDm% > %Cm% ( 
48.
		if %DEDd% > %Cd% ( 
49.
			set age=365-(mDivd+dDiv) & echo Datei ist %age% Tage alt. 
50.
			) else ( 
51.
			set age=365+%dDiv%-%mDivd% & echo Datei ist %age% Tage alt. 
52.
53.
		) else ( 
54.
		set age=365+%dDiv%+%mDivd% & echo Datei ist %age% Tage alt. 
55.
56.
	) else ( 
57.
		if %DEDm% > %Cm% ( 
58.
			if %DEDd% > %Cd% ( 
59.
				set age=%mDivd%+%dDiv% & echo Datei ist %age% Tage alt. 
60.
				) else ( 
61.
				set age=%dDiv%-%mDivd% & echo Datei ist %age% Tage alt. 
62.
63.
			) else ( 
64.
			set age=%mDivd%+%dDiv% 
65.
66.
		)
Bitte warten ..
Mitglied: Endoro
26.04.2013, aktualisiert um 15:03 Uhr
Verarbeitet Ausdrücke in einer Batchdatei abhängig von Bedingungen. 
 
IF [NOT] ERRORLEVEL Nummer Befehl 
IF [NOT] Zeichenfolge1==Zeichenfolge2 Befehl 
IF [NOT] EXIST Dateiname Befehl 
 
  NOT               Befehl wird nur dann ausgeführt, wenn die Bedingung nicht 
                    erfüllt ist. 
 
  ERRORLEVEL Nummer Bedingung ist erfüllt, wenn das zuletzt ausgeführte 
                    Programm einen Code größer oder gleich der Nummer 
                    zurückgibt. 
 
  Zeichenfolge1==Zeichenfolge2 
                    Bedingung ist erfüllt, falls die Zeichenfolgen gleich sind. 
   
  EXIST Dateiname   Bedingung ist erfüllt, wenn die angegebene Datei existiert. 
 
  Befehl            Gibt den Befehl an, der bei erfüllter Bedingung ausgeführt 
                    werden soll. Diesem Befehl kann das Schlüsselwort ELSE 
                    folgen. Der Befehl nach dem Wort ELSE wird ausgeführt, wenn 
                    die angegebene Bedingung nicht erfüllt ist (FALSE). 
 
Die ELSE-Klausel muss auf der Zeile mit dem Befehl nach dem IF stehen. 
Zum Beispiel: 
 
    IF EXIST test.txt ( 
        del test.txt 
    ) ELSE ( 
        echo test.txt fehlt 
 
Die beiden folgenden Beispiele funktionieren nicht. Im ersten Fall wird der  
DEL-Befehl nicht durch ein Zeilenende abgeschlossen: 
 
    IF EXIST test.txt del test.txt ELSE echo test.txt fehlt 
 
In zweiten Fall befindet sich der ELSE-Befehl nicht auf derselben Zeile mit 
dem IF Schlüsselwort: 
 
    IF EXIST test.txt del test.txt 
    ELSE echo test.txt fehlt 
 
Hier ein Beispiel, wie alles auf einer Zeile angegeben werden kann: 
 
    IF EXIST test.txt (del test.txt) ELSE echo test.txt fehlt 
 
Wenn die Befehlserweiterungen aktiviert sind, wird der IF-Befehl folgendermaßen 
verändert: 
 
    IF [/I] Zeichenfolge1 Vergleichsoperator Zeichenfolge2 Befehl 
    IF CMDEXTVERSION Zahl Befehl 
    IF DEFINED Variable Befehl 
 
Dabei kann der Vergleichsoperator einer der folgenden sein: 
 
    EQU - gleich 
    NEQ - nicht gleich 
    LSS - kleiner als 
    LEQ - kleiner als oder gleich 
    GTR - größer als 
    GEQ - größer als oder gleich 
 
Die /I-Option wird angegeben, um die Groß-/Kleinschreibung beim Vergleich zu 
ignorieren. Die /I-Option kann auch in der Form Zeichenfolge1==Zeichenfolge2 
verwendet werden. Diese Vergleiche sind allgemein, das heißt, wenn beide 
Zeichenfolgen nur aus Ziffern bestehen, werden die Zeichenfolgen in Zahlen 
umgewandelt, und es wird ein nummerischer Vergleich durchgeführt. 
 
Die Bedingung CMDEXTVERSION arbeitet genau wie ERRORLEVEL, nur dass 
dabei mit einer internen Versionsnummer der Befehlserweiterungen verglichen 
wird. Die erste Versionsnummer ist 1. Diese wird um eins erhöht werden, wenn 
bedeutende Verbesserungen an den Befehlserweiterungen gemacht werden. 
Die Bedingung CMDEXTVERSION ist falsch, wenn die Befehlserweiterungen nicht 
aktiviert sind. 
 
Die Bedingung DEFINED arbeitet genau wie EXIST, bezieht sich aber auf 
den Namen einer Umgebungsvariablen und ist wahr, wenn die Umgebungs- 
variable definiert ist. 
 
Der Ausdruck %ERRORLEVEL% wird zu einer Zeichendarstellung des aktuellen 
Werts der Variablen ERRORLEVEL expandiert (vorausgesetzt, es gibt nicht bereits 
eine Umgebungsvariable mit dem Namen ERRORLEVEL, deren Wert man dann erhält). 
Nachdem ein Programm ausgeführt wurde, sieht die Verwendung von ERRORLEVEL  
wie folgt aus: 
 
    goto Antwort%ERRORLEVEL% 
    :Antwort0 
    echo J für Ja eingegeben 
    :Antwort1 
    echo N für Nein eingegeben 
 
oder unter Verwendung der Vergleichsoperatoren: 
 
    IF %ERRORLEVEL% LEQ 1 goto ok 
 
Der Ausdruck %CMDCMDLINE% wird zu der originalen Befehlszeile expandiert, 
die CMD.EXE vor irgendeiner Bearbeitung übergeben wird (vorausgesetzt, es gibt 
nicht bereits eine Umgebungsvariable mit dem Namen CMDCMDLINE, deren Wert man 
dann erhält). 
 
Der Ausdruck %CMDEXTVERSION% wird zu einer Zeichendarstellung des aktuellen 
Werts der Variablen CMDEXTVERSION expandiert (vorausgesetzt, es gibt nicht 
bereits eine Umgebungsvariable mit dem Namen CMDEXTVERSION, deren Wert man 
dann erhält).
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 15:05 Uhr
Danke :D Wär ich n Weib würde ich dich jetzt mit Herzchen zuspammen :D
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 15:27 Uhr
Lalala ... Jetzt ist ein Fehler drin ... Mal sehen wie ich den loswerde :D
01.
if 2013 LSS 2013 (set 0=2013-2013) else (set 0=2013-2013 ) 
02.
"=0" ist syntaktisch an dieser Stelle nicht verarbeitbar.
Fällt dir etwas ein wie ich es lösen kann?
Mir fällt nur ein umständlicher weg ein, und da müsste ich mein ganzes Skript neu strukturieren mit Sprungmarken ...
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 15:59 Uhr
Das Problem ist der folgende Befehl
01.
if mDiv1=q ( 
02.
	set mDivd=0 
03.
	) else ( 
04.
	set mDivd=%mDiv1%*30 
05.
	)
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 16:20 Uhr
Anfängerfehler ... Mal wieder vergessen, dass es == sein muss...
Jetzt muss ich nur noch n bissl schauen dass das Ergebnis richtig wird :D
Das ist es leider noch nicht :D
Bitte warten ..
Mitglied: Biber
26.04.2013, aktualisiert 27.04.2013
Moin Noobstar0815,

wenn du den SET-Befhl zum "Rechnen" benutzen willst, dann musst du "set /a" wie arthitisch verwenden.

Keinen Unterschied macht zwar Set mDiv0=0 vs. Set /a mDiv0=0. In beiden Fällen ist mDiv0 gleich 0.

Einen Unterschied macht aber die zweite Zuweisung:
C:\Temp>set mdiv1=23 
 
C:\Temp>set mDivd=%mDiv1%*30 
 
C:\Temp>set mDivd 
mDivd=23*30 
 
C:\Temp>set /a mivd=%mDiv1%*30 
690 
C:\Temp>
-> bei Set ohne /a wird alles nachfolgende einfach nur als Text übernehmen, lediglich enthaltene %Variablen% werden aufgelöst.

Mit Set /a wird gerechnet.
Das Ergebnis steht allerdings erst für den nachfolgenden CMD-Befehl zur Verfügung/ist nicht in derselben CMD-Zeile verfügbar.

Grüße
Biber
Bitte warten ..
Mitglied: Noobstar0815
26.04.2013 um 16:49 Uhr
Habs gemerkt, leider stimmt trotzdem etwas nicht, angeblich wäre das Ergebnis 365, ist aber eigentlich 2, muss ich noch mal in Ruhe am Montag drüber schauen :D
Bitte warten ..
Mitglied: Noobstar0815
30.04.2013, aktualisiert um 14:17 Uhr
OK also ich komme nun nicht mehr weiter. Logisches Denken funktioniert bei mir im Moment nicht.

Meine gesamten Variablen sind komischer Weise zum Schluss immer 0. Die Datei die ich prüfe ist vom 24.04.13.

Hier der Code, vielleicht findet ihr den Fehler ja...

EDIT: Code entfernt da Thread sonst zu lang wird auf Dauer
Bitte warten ..
Mitglied: Noobstar0815
30.04.2013 um 13:52 Uhr
Ok, nach dem einfügen von haufenweise /a geht es. Jetzt bastel ich noch n bisschen dran rum damit es für mehrere Dateien in verschiedenen Ordnern geht, habt ihr Tipps? :D
Bitte warten ..
Mitglied: Noobstar0815
30.04.2013, aktualisiert um 15:13 Uhr
EDIT: Post gelöscht!
Also, jetzt funktioniert alles wieder, abgesehen davon, dass ich bei den Dateien nicht das Erstelldatum bekomme, sondern das Datum des letzten Zugriffs. Wie bekomme ich das geändert?
Bitte warten ..
Mitglied: Endoro
01.05.2013 um 07:13 Uhr
Hallo,

das hier könnte weiter helfen.

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
06.05.2013 um 08:51 Uhr
Zitat von Endoro:
Hallo,

das hier könnte weiter helfen.

Gruss!

Ja, prinzipiell hilft es mir weiter, allerdings verstehe ich es nicht ganz.

01.
cls 
02.
@echo off 
03.
for /f "delims=" %%f in ("g:\Adobe Reader\*") do set filedate=%%~tf 
04.
for /f "tokens=1-5 delims=. " %%i in ("%filedate%") do set "dayf=%%i"&set "monthf=%%j"&set "yearf=%%k" 
05.
 
06.
for /f "tokens=1-5 delims=. " %%i in ("%date%") do set "dayc=%%j"&set "monthc=%%k"&set "yearc=%%l"
So sehen meine for-Schleifen aus, wie müsste ich das 'dir /TW dort einbauen? Hatte es mit
01.
for /f "tokens=1-5 delims=. " %%i in ('dir /TW"%filedate%") do set "dayf=%%i"&set "monthf=%%j"&set "yearf=%%k"
versucht, allerdings bekomme ich dann nur Fehlermeldungen. Wäre sehr nett, wenn du es mir erklären könntest =)
Bitte warten ..
Mitglied: Noobstar0815
06.05.2013 um 14:45 Uhr
Gut ich kapituliere was das angeht. Alleine komme ich nicht weiter, wäre nett wenn mir jemand mal ausführlich erklärt wo mein Fehler liegt, so schauts aktuell aus:
01.
set "dirparms=/4 /TC /TA /TW"  
02.
 
03.
for %%a in (/4 /TC /TA /TW) do ( 
04.
for /f "tokens=1-5 delims=. " %%I in ('dir /ON %%a findstr /S *.*') do set "dayf=%%i"&set "monthf=%%j"&set "yearf=%%k" 
05.
06.
for %%a in (/4 /TC /TA /TW) do ( 
07.
for /f "tokens=1-5 delims=. " %%I in ('dir /ON findstr /S *.*') do set "dayc=%%j"&set "monthc=%%k"&set "yearc=%%l" 
08.
)
Bitte warten ..
Mitglied: Endoro
06.05.2013, aktualisiert um 19:54 Uhr
Hallo Noobstar,

du wolltest das Erstelldatum ("dir /tc"), leider bekommt man das nicht mit "dir /b /tc" raus, weswegen ein Umweg erforderlich ist:
01.
@echo off &setlocal 
02.
for /f "delims=" %%i in ('dir /a-d /tc ^| findstr /b [0-9]') do ( 
03.
	for /f "tokens=1-6*delims=.: " %%a in ("%%i") do ( 
04.
		set "day=%%a" 
05.
		set "month=%%b" 
06.
		set "year=%%c" 
07.
		set "hour=%%d" 
08.
		set "min=%%e" 
09.
		set "fname=%%g" 
10.
11.
	setlocal enabledelayedexpansion 
12.
	echo(!year! !month! !day! !hour!:!min! # !fname! 
13.
	endlocal 
14.
)
Die erste Forschleife filtert aus dem "dir"-Befehl die uns interessierenden Zeilen raus, die zweite Forschleife zerlegt die gefundenen Dateiinformationen in die einzelnen Tokens.

Bei mir sieht das dann so aus, daraus:
C:\TEMP>dir /a-d /tc 
 Volume in Laufwerk C: hat keine Bezeichnung. 
 Volumeseriennummer: ABCD-EFGH 
 
 Verzeichnis von C:\TEMP 
 
06.05.2013  16:04                 4 file1.txt 
06.05.2013  16:04                 0 file2.txt 
06.05.2013  16:04                 0 file3.txt 
06.05.2013  16:04                 0 file4.txt 
06.05.2013  16:04                 0 file5.txt 
               5 Datei(en)              4 Bytes 
               0 Verzeichnis(se), 440 Bytes frei
.. wird dieses:

2013 05 06 16:04 # file1.txt 
2013 05 06 16:04 # file2.txt 
2013 05 06 16:04 # file3.txt 
2013 05 06 16:04 # file4.txt 
2013 05 06 16:04 # file5.txt
Gruss!
Bitte warten ..
Mitglied: rubberman
06.05.2013 um 20:47 Uhr
Hallo Zusammen,

ich verweise mal auf DateToDays, immerhin geht es ja (wenn ich es richtig verstanden habe) auch darum Dateien älter als 30 Tage zu detektieren.

01.
@echo off &setlocal 
02.
 
03.
for /f "tokens=1-3 delims=." %%i in ("%date%") do ( 
04.
  set /a "dnow = 100%%i %% 100, mnow = 100%%j %% 100, ynow = 10000%%k %% 10000" 
05.
06.
call :DateToDays %ynow% %mnow% %dnow% daysnow 
07.
 
08.
for /f "delims=" %%i in ('dir /a-d /b') do ( 
09.
  set "filename=%%~i" 
10.
  setlocal EnableDelayedExpansion 
11.
    for /f "tokens=1-3 delims=. " %%j in ("%%~ti") do ( 
12.
      set /a "dfile = 100%%j %% 100, mfile = 100%%k %% 100, yfile = 10000%%l %% 10000" 
13.
      call :DateToDays !yfile! !mfile! !dfile! daysfile 
14.
      set /a "diff = daysnow - daysfile" 
15.
      if !diff! gtr 30 <nul set /p "=*** ACHTUNG^! *** " 
16.
      echo Datei !filename! ist !diff! Tage alt. 
17.
18.
  endlocal 
19.
20.
pause 
21.
goto :eof 
22.
 
23.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
24.
:DateToDays %yy% %mm% %dd% days 
25.
:: 
26.
:: By:   Ritchie Lawrence, 2002-09-26. Version 1.0 
27.
:: 
28.
:: Func: Returns the number of days elapsed since 1st January 1970 for a 
29.
::       given date. For NT4/2000/XP/2003. 
30.
::  
31.
:: Args: %1 year component used to create days, 2 or 4 digits (by val) 
32.
::       %2 month component used to create days, leading zero ok (by val) 
33.
::       %3 date of month used to create days, leading zero ok (by val) 
34.
::       %4 var to receive number of elapsed days (by ref) 
35.
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 
36.
setlocal ENABLEEXTENSIONS 
37.
set yy=%1&set mm=%2&set dd=%3 
38.
if 1%yy% LSS 200 if 1%yy% LSS 170 (set yy=20%yy%) else (set yy=19%yy%) 
39.
set /a dd=100%dd%%%100,mm=100%mm%%%100 
40.
set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2 
41.
set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633 
42.
endlocal&set %4=%j%&goto :EOF 
43.
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::	
Grüße
rubberman
Bitte warten ..
Mitglied: Endoro
06.05.2013, aktualisiert um 21:55 Uhr
Hallo,

diese Zeile
01.
for /f "delims=" %%i in ('dir /a-d /b') do ( 
liefert wie schon gesagt das Datum des letzten Schreibzugriffs, nicht der Erstellung der Datei (auf NTFS).

Gruss!
Bitte warten ..
Mitglied: rubberman
06.05.2013 um 22:19 Uhr
Hallo Endoro,

das ist doch auch kein Problem, oder?
Für die Zeilen 08 bis 19 aus meinem Script:
01.
for /f "tokens=1,3*" %%A in ('dir /a-d /tc^|findstr /vbc:" "') do ( 
02.
  set "filename=%%~C" 
03.
  setlocal EnableDelayedExpansion 
04.
    for /f "tokens=1-3 delims=. " %%j in ("%%A") do ( 
05.
      set /a "dfile = 100%%j %% 100, mfile = 100%%k %% 100, yfile = 10000%%l %% 10000" 
06.
      call :DateToDays !yfile! !mfile! !dfile! daysfile 
07.
      set /a "diff = daysnow - daysfile" 
08.
      if !diff! gtr 30 <nul set /p "=*** ACHTUNG^! *** " 
09.
      echo Datei !filename! ist !diff! Tage alt. 
10.
11.
  endlocal 
12.
)
Grüße
rubberman
Bitte warten ..
Mitglied: Noobstar0815
07.05.2013 um 11:44 Uhr
Hey Endoro,
das klingt schon mal nicht schlecht, allerdings komme ich nicht ganz damit klar.
Ich schaffe es grade nicht !day! !month! !year! als andere Variable zu setzen.
Wie schaffe ich es aus !day! die Variable %day% zu machen? Mit set day=!day! klappts nicht, da werden die Variablen nicht gesetzt. Desweiteren weiß ich nicht, wie ich es schaffe einen anderen Ordner damit zu durchsuchen als den jetzigen. Ein bisschen mehr Hilfe wäre lieb =)
Bitte warten ..
Mitglied: Endoro
07.05.2013 um 13:33 Uhr
Hallo Noobstar,
du kannst die Variablen natürlich auch ausserhalb der Forschleife verwenden, musst dir aber überlegen, von welcher Datei. Denn day usw. gibs ja erstmal nur einmal. Andererseits kannst du auch mit !day! innerhalb der Schleife weitermachen, das nimmt nach jedem Schleifendurchlauf den Wert der nächsten Datei an.

Gruss!
Bitte warten ..
Mitglied: Noobstar0815
07.05.2013 um 13:44 Uhr
Endoro bei mir ists so, in den Ordnern befindet sich immer nur eine einzige Datei. Leider kann ich nicht innerhalb der for-Schleife weiterarbeiten (soweit ich weis). Die Batch-Datei soll mir das Datum des Erstellens der Datei angeben, tut sie ja, allerdings als !day!!month!!year!. Ich bräuchte sie allerdings als %dayf%%monthf%%yearf%, wie bekomme ich das hin?
Bitte warten ..
Mitglied: Endoro
07.05.2013 um 14:02 Uhr
Wenn es nur eine Datei ist, dann schreibst du es einfach hin:
01.
@echo off &setlocal 
02.
for /f "delims=" %%i in ('dir /a-d /tc ^| findstr /b [0-9]') do ( 
03.
	for /f "tokens=1-6*delims=.: " %%a in ("%%i") do ( 
04.
		set "day=%%a" 
05.
		set "month=%%b" 
06.
		set "year=%%c" 
07.
		set "hour=%%d" 
08.
		set "min=%%e" 
09.
		set "fname=%%g" 
10.
11.
12.
echo(%year% %month% %day% %hour%:%min% # %fname%
Bitte warten ..
Mitglied: Noobstar0815
07.05.2013 um 15:41 Uhr
Ok funktioniert =) Allerdings gibt es da noch eine letzte Sache :D Ich habe 7 Ordner, je eine Datei, aber ich weiß nicht, wie ich es jetzt schaffe, dass die Datei in G:\automatischeUpdateswoechentlich\Update-Skripte liegt, und von dort aus nach G:\automatischeUpdateswoechentlich\Adobe Flash Player Active X springt. Wenn ich das schaffe, werde ich ein 2. Skript schreiben, in etwas so:
01.
call Hauptskript & set PfadVariableFürPassendeDatei 
02.
call Hauptskript & set ... 
03.
...
für jeden Ordner halt einmal.
Bitte warten ..
Mitglied: Endoro
07.05.2013 um 15:55 Uhr
Du könntest es mit einer for-R-Schleife versuchen.

01.
for /r "G:\automatischeUpdateswoechentlich" %%i in (*) do echo(%%~fi
Statt echo kannst du ja was Sinnvolles hinschreiben.
Bitte warten ..
Mitglied: Noobstar0815
08.05.2013 um 08:18 Uhr
Neues Problem,
01.
for /f "tokens=1-5 delims=. " %%i in ("%date%") do set "dayc=%%j" & set "monthc=%%k" & set "yearc=%%l"
gibt mir diesen Fehler:
01.
G:\>set /a Cd=08 
02.
Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17), 
03.
hexadezimale (0x11) oder oktale (021) Zahlen.
Weiß jemand warum? Dachte erst es liegt an der führenden 0, allerdings funktionierte es gestern und auch mit dem Monat 05 gibt es keine Probleme.
Bitte warten ..
Mitglied: Endoro
08.05.2013 um 08:39 Uhr
Hallo,

Zitat von Noobstar0815:
Weiß jemand warum? Dachte erst es liegt an der führenden 0,

ja, daran liegt es. Bei 8 und 9 darf bei set /a keine Null führen, weil das keine gültigen Oktalzahlen sind. Man kann sich mit so etwas behelfen:
01.
@echo off &setlocal 
02.
set "Svar=09" 
03.
set /a Nvar=1%Svar%-100 
04.
echo %Nvar%
Gruss!
Bitte warten ..
Mitglied: Noobstar0815
08.05.2013 um 08:58 Uhr
Gut, das habe ich hinbekommen, allerdings scheitere ich grade wieder an anderen Sachen...
01.
set /a counter=1 
02.
 
03.
:loop 
04.
set /a %counter%=%counter%+1
funktioniert nicht.
01.
if %counter%==1 set "%ordner%=Adobe Flash Player Active X\"& set "%ProgName%=Adobe Flash Player Active X" 
02.
if %counter%==2 set %ordner%=Adobe Flash Player Plug-In\& set %ProgName%=Adobe Flash Player Plug-In 
03.
if %counter%==3 set %ordner%=Adobe Reader\& set %ProgName%=Adobe Reader 
04.
if %counter%==4 set %ordner%=Adobe Shockwave\& set %ProgName%=Adobe Shockwave 
05.
if %counter%==5 set %ordner%=Firefox\& set %ProgName%=Firefox 
06.
if %counter%==6 set %ordner%=Java\& set %ProgName%=Java 
07.
if %counter%==7 set %ordner%=Microsoft Defender\& set %ProgName%=Microsoft Defender 
08.
if %counter%==8 goto END
schmeißt mir direkt bei if %counter%==1 einen doppelten Syntax Fehler aus
01.
for /f "delims=" "G:\%ordner%" %%i in ('dir /a-d /tc ^| findstr /b [0-9]') do ( 
02.
	for /f "tokens=1-6*delims=.: " %%a in ("%%i") do ( 
03.
		set "dayf=%%a" 
04.
		set "monthf=%%b" 
05.
		set "yearf=%%c" 
06.
07.
)
"G:\" syntaktisch nicht verarbeitbar, weiger sich scheinbar den %ordner% zu setzen
Bitte warten ..
Mitglied: Noobstar0815
08.05.2013 um 10:07 Uhr
Also alle Fehler behoben, schaffe es allerdings immer noch nicht in die Ordner zu kommen. Wenn ich es richtig verstehe mit der for /r schleife geht sie dann in jeden Ordner, allerdings gibt es dort Ordner die irrelevant sind, deswegen würde ich es gerne machen wie oben genannt, einen Counter einbauen (gemacht), der mir die Variablen passend für den gewünschten Ordner setzt (geschafft) und zum Schluss beendet (geschafft). Einzige was ich nicht schaffe ist es richtig einzusetzen.
01.
for /f "delims=" %%i in ('dir /a-d /tc ^| findstr /b [0-9]') do ( 
02.
	for /f "tokens=1-6*delims=.: " %%a in ("%%i") do ( 
03.
		set "dayf=%%a" 
04.
		set "monthf=%%b" 
05.
		set "yearf=%%c" 
06.
07.
)
Wo muss ich da in diesem code die Variable "G:\%ordner%" einbauen, damit es funktioniert?
Bitte warten ..
Mitglied: Endoro
08.05.2013 um 10:30 Uhr
Bei der For-r-Scheife kann ein Startfolder angegeben werden, bei der For-f-Schleife ist das eher sinnlos. Hier gehört das zum "dir" Befehl:

01.
for /f "delims=" %%i in ('dir /a-d /tc "G:\%ordner%" ^| findstr /b [0-9]') do (
Bitte warten ..
Mitglied: Noobstar0815
08.05.2013 um 10:59 Uhr
Danke, bin nun endlich fertig mit dem Skript =)
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Neuere Datei per Batch ausfinding machen (2)

Frage von chattie zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...