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

Dateien suchen in einem bestimmten Zeitraum und Archivbit setzen

Frage Entwicklung Batch & Shell

Mitglied: zeroblue2005

zeroblue2005 (Level 2) - Jetzt verbinden

19.04.2010 um 08:17 Uhr, 4714 Aufrufe, 8 Kommentare

Hallo Zusammen,

benötige Hilfe für die erstellung einer kleinen Batchdatei. Folgendes soll ausgeführt werden:

Suche in einer Pfadangabe inkl. Unterverzeichnissen nach allen Dateien *.* in einem bestimmten Zeitraum (Erstellungsdatum). Setze bei allen diesen Dateien das Archivbit!

Finde irgendwie nichts passendes. Kann mir da jemand helfen?

Danke und Gruß Mike
Mitglied: Snowman25
19.04.2010 um 12:07 Uhr
Zitat von zeroblue2005:
Hallo Zusammen,
Hallo zeroblue2005,

benötige Hilfe für die erstellung einer kleinen Batchdatei.
na dann schaun wir mal..

Folgendes soll ausgeführt werden:
Suche in einer Pfadangabe inkl. Unterverzeichnissen nach allen Dateien *.* in einem bestimmten Zeitraum (Erstellungsdatum). Setze
bei allen diesen Dateien das Archivbit!
Erstellungsdatum? das ist fies in batch...

Finde irgendwie nichts passendes. Kann mir da jemand helfen?
Wundert mich nicht, dass du nix passendes findest. Aber ich kann dir helfen.
Hier mal ein Debug-entwurf (macht noch nichts):
01.
@Echo off 
02.
setlocal enabledelayedexpansion 
03.
set thisyear=%date:~6,4% 
04.
dir /a:-d /s /t:c>%TEMP%\archivebit.tmp 
05.
for /F "tokens=1 delims=" %%A in (%TEMP%\archivebit.tmp) do ( 
06.
	Echo %%A 
07.
	call :getDatefromDir %%A 
08.
	for /F "tokens=4 delims= " %%B in ('Echo %%A') do ( 
09.
		Echo %%B 
10.
11.
12.
 
13.
:getDatefromDir 
14.
set truedate=0 
15.
set "fday=" 
16.
set "fmonth=" 
17.
set "fyear=" 
18.
set got=%1 
19.
set fyear=%got:~6,4% 
20.
set fmonth=%got:~3,2% 
21.
set fday=%got:~0,2% 
22.
if NOT defined fday Echo FDAY not defined: %got% && set truedate=0 && goto abort 
23.
if NOT defined fmonth Echo FMONTH not defined: %got% && set truedate=0 && goto abort 
24.
if NOT defined fyear Echo FYEAR not defined: %got% && set truedate=0 && goto abort 
25.
	 
26.
if DEFINED fday ( 
27.
	if NOT "x%fday%"=="x " ( 
28.
		if NOT "x%fday%"=="x" ( 
29.
			if %fday% GEQ 0 ( 
30.
				if %fday% LEQ 31 ( 
31.
					set truedate=1 
32.
					Echo DAY - check 
33.
				) else ( 
34.
					set truedate=0 
35.
					goto abort 
36.
37.
			) else ( 
38.
				set truedate=0 
39.
				goto abort 
40.
41.
		) else ( 
42.
			set truedate=0 
43.
			goto abort 
44.
45.
46.
47.
 
48.
if DEFINED fmonth ( 
49.
	if NOT "x%fmonth%"=="x " ( 
50.
		if NOT "x%fmonth%"=="x" ( 
51.
			if %fmonth% GEQ 0 ( 
52.
				if %fmonth% LEQ 12 ( 
53.
					set truedate=1 
54.
					Echo MONTH - check 
55.
				) else ( 
56.
					set truedate=0 
57.
					goto abort 
58.
59.
			) else ( 
60.
				set truedate=0 
61.
				goto abort 
62.
63.
		) else ( 
64.
			set truedate=0 
65.
			goto abort 
66.
67.
68.
69.
 
70.
if DEFINED fyear ( 
71.
	if NOT "x%fyear%"=="x " ( 
72.
		if NOT "x%fyear%"=="x" ( 
73.
			if %fyear% GEQ 0 ( 
74.
				if %fyear% LEQ %thisyear% ( 
75.
					set truedate=1 
76.
					Echo YEAR - check 
77.
				) else ( 
78.
					set truedate=0 
79.
					goto abort 
80.
81.
			) else ( 
82.
				set truedate=0 
83.
				goto abort 
84.
85.
		) else ( 
86.
			set truedate=0 
87.
			goto abort 
88.
89.
90.
91.
goto :EOF 
92.
 
93.
:abort 
94.
Echo %got% 
95.
Echo Genuine: %truedate% 
96.
pause>nul 
97.
Echo --------------------- 
98.
Echo. 
99.
goto :EOF
Ist fast fertig.
Ich hoffe doch, dein Datum ist im Format DD.MM.YYYY formatiert...

Danke und Gruß Mike
Gruß
Snow
Bitte warten ..
Mitglied: bastla
19.04.2010 um 12:10 Uhr
Hallo zeroblue2005!

Etwa so (ungetestet):
01.
@echo off & setlocal 
02.
set "Basis=D:\Startordner" 
03.
set "Von=20100101" 
04.
set "Bis=20100331" 
05.
 
06.
for /f "delims=" %%i in ('dir /s /b /a-d "%Basis%"') do call :ProcessFile "%%i" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
set Erst= 
11.
for /f "tokens=1-3 delims=. " %%a in ('dir /tc %1^|findstr /i /e "%~nx1"') do set "Erst=%%c%%b%%a" 
12.
if not defined Erst (echo Erstellungsdatum fuer %1 nicht ermittelt! & goto :eof) 
13.
if %Erst% lss %Von% goto :eof 
14.
if %Erst% leq %Bis% attrib +a %1 
15.
goto :eof
Die Zeilen 3 und 4 sollten eigentlich selbsterklärend sein.

Wenn Du vor dem "attrib" noch ein "echo" platzierst, wird (zum Testen) der Befehl nur angezeigt, aber noch nicht ausgeführt ...

Grüße
bastla

[Edit]
@Snowman25: Jetzt schreibst Du so viel und bist immer noch früher fertig ...
Ich hoffe doch, dein Datum ist im Format DD.MM.YYYY formatiert...
Der Hoffnung schließe ich mich an ...
Zur Sicherheit dem "findstr" noch ein "/i" spendiert ...
[/Edit]
Bitte warten ..
Mitglied: Snowman25
19.04.2010 um 12:22 Uhr
Hi bastla,

möglicherweise ist meine (unfertige) Lösung etwas größer. Das liegt aber daran, dass ich 'ne getestet Validierungsroutine für das Datum drin habe, die ich so eig. überall einsetzen kann (und wohl auch werde).
Nur schaff ichs mal wieder nicht, Variablen aus der Schleife auch ausserhalb zu verwenden. Verhedder mich da jedesmal. Da gabs doch 'ne Möglichkeit dazu, oder?

Gruß
Snow
Bitte warten ..
Mitglied: zeroblue2005
19.04.2010 um 12:23 Uhr
Danke erst mal an euch beide Ich versuche es später mal, da im Monment bei uns hier ein wenig brennt.

Vielen Dank noch mal!!!!
Bitte warten ..
Mitglied: bastla
19.04.2010 um 12:29 Uhr
@Snowman25
'ne getestet Validierungsroutine für das Datum
... ist sicher eine gute Sache - ich gehe aber mal davon aus, dass noch nicht mal Windows einen 31.02. als Erstellungsdatum angibt ...
Variablen aus der Schleife auch ausserhalb zu verwenden.
Was genau meinst Du damit (hatte noch nicht Zeit, mir Deinen Ansatz näher anzusehen)?

Grüße
bastla
Bitte warten ..
Mitglied: Snowman25
19.04.2010 um 12:38 Uhr
Zitat von bastla:
@Snowman25
'ne getestet Validierungsroutine für das Datum
... ist sicher eine gute Sache - ich gehe aber mal davon aus, dass noch nicht mal Windows einen 31.02. als Erstellungsdatum angibt
Das sind Einzelfälle. Die werden dann später noch extra behandelt. wie gesagt: Ist ja noch nicht fertig

Variablen aus der Schleife auch ausserhalb zu verwenden.
Was genau meinst Du damit (hatte noch nicht Zeit, mir Deinen Ansatz näher anzusehen)?

Variablen, die in einer Schleife gesetzt wurden, gelten doch auch nur darin (Stichworte: Context, Geltungsbereich, namespace etc..).
DAS stört mich gerade..

Grüße
bastla

Grüße
Snow
Bitte warten ..
Mitglied: bastla
19.04.2010 um 15:21 Uhr
@Snowman25
Variablen, die in einer Schleife gesetzt wurden, gelten doch auch nur darin
Das kann ich nun beim besten Willen nicht nachvollziehen - zumeist ist es genau entgegengesetzt: Variablen, die in einer Schleife gesetzt wurden, können nur unter Verwendung von "delayedExpansion" auch gleich in der Schleife verwendet werden ...

Könntest Du das Problem vielleicht an einem konkreten Beispiel festmachen?
Übrigens: Deine Zeilen 26 bis 46 sollten sich ohne Verlust an Funktionalität (Du unterscheidest ja nicht nach dem Grund, der das Datum ungültig macht) auch so schreiben lassen:
01.
set /a "fdayCheck=1%fday%" 
02.
set "truedate=0" 
03.
if %fdayCheck% GEQ 101 if %fdayCheck% LEQ 131 set "truedate=1" 
04.
if %truedate%==1 (Echo DAY - check) else (goto abort)
Auf "defined" hast Du schon in Zeile 22 geprüft, was die Abfragen in den Zeilen 26 und 28 obsolet macht.

Unter der Annahme, dass zweistellige Werte zu verarbeiten sind, beugt die Verwendung von "%fdayCheck%" Fehlern bei "08" und "09" vor ...
Um alle Schreibweisen abzudecken und wirklich nur Werte zwischen 1 und 31 "durchzulassen" müsste allerdings noch wesentlich mehr Aufwand getrieben werden - auch zB mit der "direkteren" Vorgangsweise
01.
if "%fday%"=="08" set "fday=8" 
02.
if "%fday%"=="09" set "fday=9" 
03.
set /a fdayCheck=%fday% 
04.
set "truedate=0" 
05.
if %fdayCheck% GEQ 1 if %fdayCheck% LEQ 31 set "truedate=1" 
06.
if %truedate%==1 (Echo DAY - check) else (goto abort)
bleiben noch Fehlerquellen (wie etwa ein Wert "0A1") ...

Grüße
bastla
Bitte warten ..
Mitglied: zeroblue2005
20.04.2010 um 10:44 Uhr
Hallo Ihr beiden, also habe das jetzt getestet und läuft super vielen Dank noch mal
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...