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

Eindeutige Zeichenfolgen mit findstr möglich?

Mitglied: Sildorian

Sildorian (Level 1) - Jetzt verbinden

14.06.2012 um 12:06 Uhr, 2143 Aufrufe, 2 Kommentare

Hallo,

ich versuche gerade für einen Kunden eine Batch-Datei für die Datensicherung zu schreiben.


Situation:
In einem Ordner liegen mehrere Betriebs-Ordner, jeder Betrieb hat zudem einzelene Unterordner für jedes Jahr, als z.B.:

Ordner Betriebsdaten
- [133415132] Peter, Hans
--- 2010
--- 2011
--- 2012
- Hans Peter
--- 2008
--- 2009
--- 2010
- Ferdinant Mayer
--- 2011


Ziel:
Für jeden einzelnen Betrieb sollen nur die jeweils letzten beiden Betriebsjahre gesichert werden.


Mein Lösungsweg:
1. Alle Betriebe in einer Textdatei listen (si1.txt)
2. Den letzten Betrieb der Liste als Parameter 1 festlegen.
3. Alle Betriebsjahre dieses Betriebes als Textdatei listen (si2.txt)
4. Das letzte Jahr der Liste als Parameter 2 festlegen
5. Aus diesen beiden Parametern den zu sichernden Pfad erzeugen.
6. Das verwendete Betriebsjahr aus der Liste löschen und den Punkt 4 wiederholen, bis der Wert "2" erreicht ist.
7. Den verwendeten Betrieb aus der Liste löschen und den Punkt 2 wiederholen, bis alle Betriebe durch sind.


Das Problem:
Um den Betriebsnamen aus der Textdatei zu löschen, lasse ich über den Befehl "findstr" eine neue Textdatei erzeugen, die alles AUßER dem zuletzt verwendeten Betriebsnamen enthält.. ich habe aber bisher keine Möglichkeit gefunden, dass dabei wirklich NUR der Eintrag gelöscht wird, der EXAKT diesem Betriebsnamen entspricht. Soll heißen, aktuell würde nach der Bearbeitung von "[133415132] Peter, Hans" auch der Betrieb "Hans Peter" aus der Liste verschwinden.
Hier mal der gesamte Code in einer vereinfachten Form, um das ganze zu verdeutlichen.. das Problem tritt im Abschnitt "Betriebende" auf.


01.
  
02.
@echo off 
03.
REM Datum und Uhrzeit werden festgelegt und der Sicherungsordner erstellt. 
04.
FOR /F "tokens=1-3 delims=/.- " %%A IN ('date /T') DO (SET TT=%%A&SET MM=%%B&SET JJJJ=%%C) 
05.
SET Datum=%JJJJ%.%MM%.%TT% 
06.
FOR /F "tokens=1-4 delims=:, " %%A IN ('time /T') DO (SET hh=%%A& SET mm=%%B& SET ss=%%C& SET ms=%%D) 
07.
SET Uhrzeit=%hh%.%mm%Uhr 
08.
SET Sicherungsordner=.\Sicherung\%Datum%\%Uhrzeit% 
09.
 
10.
REM Alle Betriebsnamen werden als si1.txt gespeichert. 
11.
dir /B /D ".\Daten" > si1.txt 
12.
 
13.
 
14.
:Betriebsauswahl 
15.
REM Der letzte Betrieb der si1.txt wird als Parameter ausgewählt. 
16.
SET loop=0 
17.
for %%R in (si1.txt) do if %%~zR equ 0 goto Ende 
18.
for /F "Tokens=*" %%i in (si1.txt) do Set betrieb=%%i 
19.
 
20.
REM Die Betriebsjahre des Betriebes werden als si2.txt gespeichert 
21.
dir /B /D ".\Daten\%betrieb%\" > si2.txt 
22.
 
23.
 
24.
 
25.
:Betriebsjahr 
26.
REM Die letzten beiden Ordner des Betriebes werden gesichert. 
27.
if %loop% geq 2 goto Betriebende 
28.
for /F "Tokens=*" %%i in (si2.txt) do Set betriebsjahr=%%i 
29.
 
30.
if not exist "%Sicherungsordner%\%betrieb%\%betriebsjahr%\" MD "%Sicherungsordner%\%betrieb%\%betriebsjahr%\" 
31.
xcopy ".\Daten\%betrieb%\%betriebsjahr%\*.*" "%Sicherungsordner%\%betrieb%\%betriebsjahr%\" /E /Y 
32.
for /f "delims=:" %%i in ('findstr /L /E /V "%betriebsjahr%" "si2.txt"') do echo %%i>>"si3.txt" 
33.
copy si3.txt si2.txt 
34.
del si3.txt 
35.
set /A loop=%loop%+1 
36.
goto Betriebsjahr 
37.
 
38.
 
39.
:Betriebende 
40.
REM 2 Unterordner wurden gesichert, weiter gehts mit dem nächsten. 
41.
for /f "delims=:" %%i in ('findstr /L /E /V "%betrieb%" "si1.txt"') do echo %%i>>"si3.txt" 
42.
copy si3.txt si1.txt 
43.
del si3.txt 
44.
goto Betriebsauswahl 
45.
 
46.
 
47.
:Ende 
48.
echo. 
49.
echo. 
50.
echo. 
51.
echo Alle Sicherungen abgeschlossen! 
52.
echo. 
53.
pause

Es wäre super, wenn mir da jemand weiterhelfen könnte. Im Grunde fehlt mir nur eine Möglichkeit, bei "findstr" festzulegen, dass der Datensatz GENAU der Vorgabe entsprechen muss.

Grüße
- Sildorian

Mitglied: pieh-ejdsch
14.06.2012, aktualisiert um 13:48 Uhr
moin Sildorian,

irgendwie gehst Du das ganze von der Falschen Seite her an.

Eine Forschleife arbeitet doch schon eins nach dem anderen Ab und fängt auch von Vorne an.
Wieso also von Hinten mit 2 Listen anfangen, welche noch im Script erstellt werden?

01.
@echo off 
02.
setlocal 
03.
set "BetriebsDaten=.\Daten" 
04.
set /a LetzteJahre=2 
05.
 
06.
REM Datum und Uhrzeit werden festgelegt und der Sicherungsordner erstellt.  
07.
FOR /F "tokens=1-3 delims=/.- " %%A IN ('date /T') DO (SET TT=%%A&SET MM=%%B&SET JJJJ=%%C)  
08.
SET Datum=%JJJJ%.%MM%.%TT%  
09.
FOR /F "tokens=1-4 delims=:, " %%A IN ('time /T') DO (SET hh=%%A& SET mm=%%B& SET ss=%%C& SET ms=%%D)  
10.
SET Uhrzeit=%hh%.%mm%Uhr  
11.
SET Sicherungsordner=.\Sicherung\%Datum%\%Uhrzeit%  
12.
 
13.
for /d %%a in ("%BetriebsDaten%\*") do @set /a x=%LetzteJahre% &for /f delims^= %%b in ('dir /b /ad /o-d "%%a"' ) do @set /a y=1/x 2>nul && set /a x-=1 &&call :Sicherung "%%a" "%%b" 
14.
 
15.
echo. 
16.
echo. 
17.
echo. 
18.
echo Alle Sicherungen abgeschlossen! 
19.
echo. 
20.
pause 
21.
exit /b 0 
22.
 
23.
:Sicherung 
24.
echo Sichere "%~1\%~2" 
25.
xcopy "%~1\%~2\*.*" "%Sicherungsordner%\%~nx1\%~2\" /E /Y 
26.
 
27.
exit /b
Gruß Phil
Bitte warten ..
Mitglied: Sildorian
19.06.2012 um 10:08 Uhr
Besten Dank Phil, das klappt ja super! Viel eleganter gelöst, ich war irgendwie der Ansicht, dass eine doppelte FOR-Schleife garnicht funktioniert und den Lösungsweg daher früh verworfen.. wieder was dazugelernt! Hab es noch fix auf die realen Bedingungen hier angepasst und schon hat es geflutscht ^^

Falls trotzdem noch jemand eine Antwort auf das ursprüngliche Problem mit der eindeutigen Zeichenreihenfolge im "findstr" hat, würde mich das schon sehr interessieren, aber dank Phils Lösung ist die eigentliche Aufgabe ja jetzt gelöst.

Grüße
- Sildorian
Bitte warten ..
Ähnliche Inhalte
Monitoring

Eindeutige Identifizierung von Rechnern im Netzwerk

gelöst Frage von MarabuntaMonitoring6 Kommentare

Hallo, ich möchte eine Art Selbstverwaltung von Rechnern im Netzwerk per Skript erreichen. Dazu sollen sich die Rechner in ...

Visual Studio

VBScript Zeichenfolge aus String entfernen

gelöst Frage von Leogal0010Visual Studio1 Kommentar

Hallo, Community! Ich habe da ein Problem: Ich schreibe einen kleinen "LAN-Chat" mit VBScript/VBS. D.h. auf einem Laufwerk, auf ...

Windows Tools

Findstr und regex

gelöst Frage von tobmesWindows Tools5 Kommentare

Hi Experten, ich habe ziemlich viele PDF-Dateien, die ich mittels eines Batch-Files nach einem Bestimmten Muster durchsuchen möchte. Die ...

Entwicklung

Dateiname auf bestimme Zeichenfolge überprüfen?

gelöst Frage von matzettoEntwicklung8 Kommentare

Hallo Experten, leider komme ich bei einer bestimmten Problematik in meinem aktuellen Projekt nicht weiter und wollte daher hier ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 5 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 10 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server23 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

Webbrowser
Welcher Browser ist der Beste?
Frage von justtinWebbrowser15 Kommentare

Hallo Leute Ich habe eine interessante Frage. Mich wurde mal interessieren welcher Browser ist eure meinung nach der beste? ...