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

Per Batch Dateien mit Such-String im Dateinamen verschieben, wenn die Datei den Suchbegriff enthält

Frage Entwicklung Batch & Shell

Mitglied: meandmyself

meandmyself (Level 1) - Jetzt verbinden

09.12.2008, aktualisiert 18.10.2012, 5834 Aufrufe, 17 Kommentare

Hallo zusammen,

folgende Aufgabenstellung arbeiten wir recht zeitintensiv zz. noch manuell ab. Vielleicht gibt es dafür einen Batchansatz:

Zwei Verzeichnisse sollen überwacht und überprüft werden, ob ein bestimmter (vierstelliger) Ziffernstring einer Transfer(text)datei aus dem Ordner A in den variablen Dateinamen von Protokoll(text)dateien aus Ordner B enthalten sind. Darüberhinaus soll geprüft werden, ob in den gefundenen Dateien das Stichwort "Doppelt" vorkommt, wenn ja dann verschiebe die Transferdatei aus Verzeichnis A nach A_archiv und die Protokolldatei aus Verzeichnis B nach B_archiv.

Ich hoffe ich habe mich halbwegs verständlich ausgedrückt.

Besten Dank für Eure Hinweise!

Gruß,
meandmyself
Mitglied: bastla
09.12.2008 um 16:52 Uhr
Hallo meandmyself!

Woran ist die Datei im Ordner A als "Transferdatei" zu erkennen?
Vielleicht magst Du ja Deine Erklärung noch mit einem konkreten Beispiel unterlegen ...

Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 17:01 Uhr
Hi bastla,

die Transferdateien heißen RMxxxx.txt oder RMDebixxxx.txt, die zugehörigen Protokolldateien SRGxxxx.txt oder SDBxxxx.txt oder errSRGxxxx....txt bzw. errSDBxxxx....txt.

Reicht das als Erläuterung?

Danke und Gruß,
meandmyself
Bitte warten ..
Mitglied: bastla
09.12.2008 um 18:07 Uhr
Hallo meandmyself!

Reicht das als Erläuterung?
Du hättest vielleicht noch klarstellen können, ob das Wort "Doppelt" in beiden (allen) betroffenen Dateien vorkommen muss, und ob dabei Groß-/Kleinschreibung zu beachten ist (was ich zunächst einmal nicht annehme und daher im Entwurf unten ignoriere).

Da es Dir außerdem keine Erwähnung wert war, gehe ich davon aus, dass bereits im Archivordner vorhandene gleichnamige Dateien kommentarlos überschrieben werden dürfen.

Ev wäre es auch noch sinnvoll gewesen, die Bedeutung der Begriffe "überwachen" und "überprüfen" etwas näher zu erklären, aber das kannst Du ja ggf nachholen ...
Nach meinem (bisherigen) Verständnis könnte es jedenfalls so gehen:
01.
@echo off & setlocal 
02.
set "OrdnerA=D:\A" 
03.
set "OrdnerB=D:\B" 
04.
set "OrdnerAArchiv=D:\A_Archiv" 
05.
set "OrdnerBArchiv=D:\B_Archiv" 
06.
 
07.
for %%i in ("%OrdnerA%\RM*.txt") do findstr /i "Doppelt" "%%i">nul && call :ProcessFile "%%i" 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "Name=%~n1" 
12.
set "Nr=%Name:~-4% 
13.
for %%b in ("%OrdnerB%\SRG%Nr%.txt" "%OrdnerB%\SDB%Nr%.txt" "%OrdnerB%\errSRG%Nr%....txt" "%OrdnerB%\errSDB%Nr%....txt") do ( 
14.
    findstr /i "Doppelt" "%%b">nul 2>nul && ( 
15.
        if exist %1 move %1 "%OrdnerAArchiv%">nul 
16.
        move "%%b" "%OrdnerBArchiv%">nul 
17.
18.
19.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 18:44 Uhr
Hallo bastla,

erstmal vielen Dank für Deine Hilfe und sorry für die ungenaue Erläuterung. Also der Suchbegriff "Doppelt" (Klein- oder Großschreibung spielt keine Rolle) soll allen Protokolldateivarianten gesucht werden, also sowohl in SRGxxxx, SDBxxxx, als auch in den Varianten mit err (für Fehler) als Präfix (errSRG..., errSDB...).

Die Dateien sollten einmalig sein, weswegen die Überschreibproblematik nicht auftauchen sollte, deswegen sagen ich erstmal, überschreiben ist okay.

Überwachen hieße, dass das Verzeichnis "A" permanent auf Eingang der Transferdateien geprüft wird und ggf. die Bereinigung durch das bedingte Verschieben durchgeführt wird.
Evtl. ist das aber zu kompliziert zu realisieren, dann reicht das von Hand ausführen der Batch (oder evtl. per Taskplaner).

Leider habe ich noch zwei Bedingungen vergessen, die Dateien mit dem Tagesdatum sollen ausgeschlossen werden und die Fehlerprotokolldateien (err...txt), die "Doppelt" enthalten sollen gelöscht werden.

Nochmals Danke für Deine Unterstützung,
meandmyself
Bitte warten ..
Mitglied: bastla
09.12.2008 um 19:08 Uhr
Hallo meandmyself!

Jetzt drängen sich noch weitere Fragen auf ...
die Dateien mit dem Tagesdatum sollen ausgeschlossen werden
Wozu eine permanente Überwachung, wenn aktuelle Dateien (btw: Ist mit "Tagesdatum" das Änderungsdatum gemeint? Welche Datei muss auf das Datum hin überprüft werden?) ohnehin nicht verarbeitet werden sollen?
Kann es jeweils nur eine Protokolldatei geben?
Sieht die Struktur der Namen der Fehlerprotokolldateien tatsächlich so aus:
errSRGxxxx....txt
bzw wofür stehen anderenfalls die Punkte nach den 4 Ziffern?
Soferne ich das jetzt richtig verstanden habe: Muss der Inhalt der Transferdatei nicht auf das Vorhandensein von "doppelt" untersucht werden?

Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 19:48 Uhr
Lieber bastla,

ich strapazier Deine Geduld ganz schön. Du hast recht mit Deinem Einwand, wozu überwachen wenn die Dateien mit dem heutigen Datum ("geändert am") ausgeschlossen werden sollen. Hintergrund ist der, dass mein Kollege mir in Form eines schriftliches Skript eine Vertretungsaufgabe (Urlaub etc.) gegeben hat und ich keine Lust habe in zig Dateien mit kryptischen Ziffernfolgen nach Übereinstimmungen zu suchen. Also lassen wir die Überwachungsgeschichte einfach aussen vor. Dateien mit dem heutigen Änderungsdatum bleiben unberücksichtigt.

Die Transferdateien (RMxxxx.txt bzw. RMDebixxxx.txt) heißen z. B. RM59761234.txt, deren Inhalt interessiert nicht. Die zugehörige Protokolldatei heißt z.B. SRG59761234-20081205.txt, in dieser soll nach dem Stichwort "Doppelt" geschaut werden, genauso in der korrespondierenden Fehlerprotokolldatei, z. B. errSRG59761234-20081205.txt.

Mit den Punkten wollte ich anzeigen, dass dieser Teil variabel ist.

Viele Grüße,
meandmyself
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 20:02 Uhr
Ergänzung: ja, nach meinem Verständnis kann es nur eine zugehörige Protokolldatei geben.
Bitte warten ..
Mitglied: bastla
09.12.2008 um 20:45 Uhr
Hallo meandmyself!

Zum Testen:
01.
@echo off & setlocal 
02.
set "OrdnerA=D:\A" 
03.
set "OrdnerB=D:\B" 
04.
set "OrdnerAArchiv=D:\A_Archiv" 
05.
set "OrdnerBArchiv=D:\B_Archiv" 
06.
 
07.
for %%i in ("%OrdnerA%\RM*.txt") do call :ProcessFile "%%i" 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "Name=%~n1" 
12.
set "Nr=%Name:~-4% 
13.
 
14.
::Protokolldatei 
15.
for %%b in ("%OrdnerB%\SRG????%Nr%-*.txt" "%OrdnerB%\SDB????%Nr%-*.txt") do ( 
16.
    findstr /i "Doppelt" "%%b">nul 2>nul && ( 
17.
        for /f %%d in ("%%~tb") do if %%d neq %date% ( 
18.
            if exist %1 echo move %1 "%OrdnerAArchiv%" 
19.
            echo move "%%b" "%OrdnerBArchiv%" 
20.
21.
22.
23.
 
24.
::Fehlerprotokolldatei 
25.
for %%b in ("%OrdnerB%\errSRG????%Nr%-*.txt" "%OrdnerB%\errSDB????%Nr%-*.txt") do ( 
26.
    findstr /i "Doppelt" "%%b">nul 2>nul && ( 
27.
        for /f %%d in ("%%~tb") do if %%d neq %date% ( 
28.
            if exist %1 echo move %1 "%OrdnerAArchiv%" 
29.
            echo del "%%b" 
30.
31.
32.
33.
goto :eof
Da jeweils vor "move" bzw vor dem "del" ein "echo" steht, werden die Befehle zum Verschieben bzw Löschen nur angezeigt - wenn Deine Tests ergeben, dass Du die Verwendung des Batches riskieren willst, einfach alle 4 "echo" entfernen.

Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 21:05 Uhr
Hallo bastla,

super, geht aber noch nicht: wenn ich die Prüfung auf das Änderungsdatum nur auf die Transferdateien beziehen will, kann ich dann die Zeilen 07 und 08 so ändern:

for %%i in ("%OrdnerA%\RM*.txt") do if %%i neq %date% call :ProcessFile "%%i"
goto :eof

Gruß,
meandmyself
Bitte warten ..
Mitglied: bastla
09.12.2008 um 21:12 Uhr
Hallo meandmyself!
wenn ich die Prüfung auf das Änderungsdatum nur auf die Transferdateien beziehen will
... müsste die Zeile 07 so aussehen:
for %%i in ("%OrdnerA%\RM*.txt") do for /f %%d in ("%%~ti") do if %%d neq %date% call :ProcessFile "%%i"
Die Zeilen 17, 20, 27 und 30 sorgen für die Datumsprüfung der (Fehler-)Protokolldateien und wären dann vermutlich überflüssig ...

Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 21:22 Uhr
Hi bastla,

geht leider noch net. Also ich habe hier zum Testen die Transferdatei RM1234.txt (ohne Inhalt) und die Protokolldatei SRG1234-20081205.txt mit "Doppelt" drin. Liegt es daran?

Was bedeutet eigentlich die Definition dieser Variablen?
set "Name=%~n1"

set "Nr=%Name:~-4%

Mit bestem Gruß,
meandmyself
Bitte warten ..
Mitglied: bastla
09.12.2008, aktualisiert 18.10.2012
Hallo meandmyself!

Oben hast Du noch behauptet, die Namen würden so aussehen:
RM59761234.txt 
SRG59761234-20081205.txt
und (im Eröffnungsposting) der Zifferncode (ich nenne ihn einfach Nummer bzw Nr) wäre vierstellig - dementsprechend wird auch nach Dateien gesucht, welche nach dem "SRG" zunächst 4 beliebige Stellen (????), danach die Nummer und "-" und irgendein Datum (oder sonstiges oder nix) haben ...

set "Name=%~n1"
Das Unterprogramm ":ProcessFile" wird mit Übergabe des kompletten Dateipfades der Trasferdatei aufgerufen - diese Zeile entnimmt diesem Pfad nur den Namen (ohne die Extension ".txt").
set "Nr=%Name:~-4%
Da die letzten 4 Zeichen des Namens die zur Identifikation benötigte Nummer enthalten, wird diese extrahiert und als %Nr% gespeichert.

Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 21:49 Uhr
Hallo bastla,

mea culpa, habe schon wieder Verwirrung gestiftet. Die beiden Beispieldateinamen RM59761234.txt und dazugehörig SRG59761234-20081205.txt sind richtig. In der Arbeitsanweisung meines Kollegen steht SRGxxxx.txt, weswegen ich von einem vierstelligen Identifikationsstring ausgegangen bin. Die übereinstimmende und zu prüfende Zeichenfolge ist demnach 59761234, nach dem Bindestrich kommt ein Datumsstempel in der Protokolldatei, was nicht berücksichtigt werden soll.

Nochmals sorry...
Bitte warten ..
Mitglied: bastla
09.12.2008 um 21:57 Uhr
Hallo meandmyself!

Dann also etwa so:
01.
@echo off & setlocal 
02.
set "OrdnerA=D:\A" 
03.
set "OrdnerB=D:\B" 
04.
set "OrdnerAArchiv=D:\A_Archiv" 
05.
set "OrdnerBArchiv=D:\B_Archiv" 
06.
 
07.
for %%i in ("%OrdnerA%\RM*.txt") do for /f %%d in ("%%~ti") do if %%d neq %date% call :ProcessFile "%%i" 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "Name=%~n1" 
12.
set "Nr=%Name:~-8% 
13.
 
14.
::Protokolldatei 
15.
for %%b in ("%OrdnerB%\SRG%Nr%-*.txt" "%OrdnerB%\SDB%Nr%-*.txt") do ( 
16.
    findstr /i "Doppelt" "%%b">nul 2>nul && ( 
17.
        if exist %1 echo move %1 "%OrdnerAArchiv%" 
18.
        echo move "%%b" "%OrdnerBArchiv%" 
19.
20.
21.
 
22.
::Fehlerprotokolldatei 
23.
for %%b in ("%OrdnerB%\errSRG%Nr%-*.txt" "%OrdnerB%\errSDB%Nr%-*.txt") do ( 
24.
    findstr /i "Doppelt" "%%b">nul 2>nul && ( 
25.
        if exist %1 echo move %1 "%OrdnerAArchiv%" 
26.
        echo del "%%b" 
27.
28.
29.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 22:09 Uhr
Hallo bastla,

komisch, es hakt noch irgendwo. Habe die echo-Anweisungen rausgenommen, aber es passiert nix. Meine Beispieldateien heißen jetzt genau so, wie oben angegeben. Habe die RM59761234.txt geändert, nachdem ich das Datum auf gestern zurückgesetzt habe und danach auf das heutige umgestellt habe. Deine batch lautet (bei mir c:\A usw.) nun:

@echo off & setlocal
set "OrdnerA=C:\A"
set "OrdnerB=C:\B"
set "OrdnerAArchiv=C:\A_Archiv"
set "OrdnerBArchiv=c:\B_Archiv"

for %%i in ("%OrdnerA%\RM*.txt") do for /f %%d in ("%%~ti") do if %%d neq %date% call :ProcessFile "%%i"
goto :eof

:ProcessFile
set "Name=%~n1"
set "Nr=%Name:~-8%

::Protokolldatei
for %%b in ("%OrdnerB%\SRG%Nr%-*.txt" "%OrdnerB%\SDB%Nr%-*.txt") do (
findstr /i "Doppelt" "%%b">nul 2>nul && (
if exist %1 move %1 "%OrdnerAArchiv%"
move "%%b" "%OrdnerBArchiv%"
)
)

::Fehlerprotokolldatei
for %%b in ("%OrdnerB%\errSRG%Nr%-*.txt" "%OrdnerB%\errSDB%Nr%-*.txt") do (
findstr /i "Doppelt" "%%b">nul 2>nul && (
if exist %1 move %1 "%OrdnerAArchiv%"
del "%%b"
)
)
goto :eof

Hast Du noch einen Tipp wo ich schauen kann?
Bitte warten ..
Mitglied: meandmyself
09.12.2008 um 22:20 Uhr
Hi bastla,

es funktioniert! In meiner Protokolldatei stimmte die Ziffernfolge nach SRG nicht genau mit der Transferdatei überein.

Vielen tausend Dank für Deine Mühe mit einem Anfänger wie mir!!!

Einen wundervollen Abend wünscht,
meandmyself
Bitte warten ..
Mitglied: bastla
09.12.2008 um 22:21 Uhr
Hallo meandmyself!

Na dann viel Spaß in der ersparten Zeit ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Batch zum suchen und verschieben von Dateien
gelöst Frage von zeroblue2005Batch & Shell5 Kommentare

Guten Tag Zusammen, ich benötige eine Batch, die folgendes kann: 1. Suche in bestimmten Dateipfad nach nach Dateien eines ...

Batch & Shell
Dateien mit Teil des Dateinamen per Batch in Unterordner verschieben
gelöst Frage von smitternachtBatch & Shell14 Kommentare

Hallo, ich muß hier Telefonmitschnitte automatisiert ablegen. Die Dateien sehen folgendermaßen aus: Richtung#interneNummerexterneNummer#Datum#Uhrzeit.wav Beispiel: In#24023147770#20160427#135844.wav (eigehend) Out#24 (ausgehend) Nun ...

Batch & Shell
Batch Dateien verschieben in Verzeichis welches Bestandteil des Dateinamens ist
gelöst Frage von skynetworksBatch & Shell5 Kommentare

Hallo zusammen, ich habe eine kleine Herausforderung: Ich muss per Batch Dateien in Unterverzeichnisse verschieben. Soweit erstmal nicht schwer ...

Batch & Shell
Batch- Dateien mit doppeltem String Charater verschieben
gelöst Frage von christianV6Batch & Shell7 Kommentare

Hallo zusammen, ich bitte um eure Hilfe, benötigt wird ein Batch-Tool mit dem man Dateien verschiebt. Und zwar liegen ...

Neue Wissensbeiträge
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 ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
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 ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

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

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 ...

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

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