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

Vergleich Liste von Dateiname mit String - wenn nicht gleich, füge den Inhalt der Datei 1 der Datei 2 zu

Frage Entwicklung Batch & Shell

Mitglied: Jim-Knopf

Jim-Knopf (Level 1) - Jetzt verbinden

30.07.2009, aktualisiert 18:16 Uhr, 3822 Aufrufe, 6 Kommentare

Ich bin neu hier und habe heute einige Stunden anhand der diversen Profi-Tipps versucht mein Anliegen zu lösen. Leider ohne Erfolg - daher folgend meine Problemstellung:

Ausgangslage:
In einem Verzeichnis liegen 0, 1 oder 2 Dateien mit der Endung ZIP.
Die Dateinamen haben die Bezeichnung TIF_20090730.ZIP
bzw. die Datei vom Vortag TIF_20090729.ZIP
Es gibt Konstellationen bei der nur die Datei TIF_20090730.zip vorhanden ist oder nur die Datei TIF_20090729.ZIP, beide oder gar keine.

Ziel:
Wenn am Tag Date (20090730) nur TIF_20090730.ZIP vorhanden ist, ist alles OK (Batch beenden)
Wenn am Tag Date (20090730) TIF_20090729.ZIP & TIF_20090730.ZIP vorhanden ist, soll der Inhalt der Datei TIF_20090729.ZIP in die Datei TIF_20090730.ZIP übernommen und die Datei TIF_200907229.ZIP gelöscht werden.
Wenn am Tag Date (20090730) nur TIF_20090729.ZIP vorhanden ist, soll diese auf TIF_20090730.ZIP umbenannt werden.
Wenn keine ZIP-Datei vorhanden ist, ist auch alles OK (Batch beenden)

Wir haben versucht mit dem comand "for" eine Schleife zu schreiben, die alle ZIP-Dateien auf das Datum prüft und dann je nach Resultat die nötigen Schritte ausführt. Bereits der Abgleich hat nicht geklappt.

Für jede Hilfestellung (auch Teilösungen des Problems) bin ich sehr froh!

Gruss
Jim Knopf
Mitglied: bastla
30.07.2009 um 18:55 Uhr
Auch Dir, Jim-Knopf, ein mindestens genauso freundliches Hallo und Willkommen im Forum!

Schematisch könnte das etwa so aussehen:
01.
@echo off & setlocal 
02.
pushd "Z:\ZIP-Dateien" 
03.
set "Pre=TIF_" 
04.
 
05.
set "Heute=%date:~-4%%date:~-7,2%%date:~-10,2% 
06.
set "ZIPHeute=%Pre%%Heute%.zip" 
07.
 
08.
if not exist "%ZIPHeute%" ( 
09.
    for /f "delims=" %%i in ('dir /b /a-d "%Pre%*.zip" 2^>nul') do echo ren "%%i" "%ZIPHeute%" 
10.
    popd 
11.
    goto :eof 
12.
13.
 
14.
for /f "delims=" %%i in ('dir /b /a-d "%Pre%*.zip" 2^>nul^|findstr /i /v /c:"%ZIPHeute%"') do ( 
15.
    echo "%%i" entpacken 
16.
    echo entpackte Dateien zu "%ZIPHeute%" hinzufuegen 
17.
18.
popd
Vorausgesetzt wird dabei, dass es tatsächlich nur 0 bis 2 Dateien entsprechend dem vorgegebenen Benennungsschema geben kann, und dass von zweien eine "TIF_Tagesdatum.zip" heißt.

Das Hinzufügen der gestrigen zur heutigen Datei wird nur durch Textausgaben simuliert, da mir der genaue Sinn der Aktion bzw die zur Verfügung stehenden Mittel (ZIP-Programm) nicht bekannt sind ...

Grüße
bastla

[Edit] Noch etwas umformuliert ... [/Edit]
Bitte warten ..
Mitglied: Jim-Knopf
31.07.2009 um 08:48 Uhr
Hallo bastla

Super herzlichen Dank!
Ich bin grad' dran das ganze mal zu verstehen... ... wie macht ihr das bloss!!!
Hab' mich aber mit den ZIP vertan:

Es handelt sich um ganz normale Textfiles (das mit dem Zippen kommt erst später und hab' ich schon umgesetzt). Könnte man den Inhalt mit type in eine Variable oder so übernehmen und dann der anderen Datei zuweisen bzw. eben renamen?

NB: Grund für die ganze Aktion:
Die Tagesverarbeitung ist um 22 Uhr fertig und die Daten werden abgeholt. Theoretisch kann nun einer kommen und nach 22 Uhr nochmals eine Datei erzeugen. Das wird vermutlich in 100 Jahre nie vorkommen aber - wir haben's ja mit der IT zu tun - wird es garantiert geschehen, wenn wir den Fall nicht abfangen. Da wir mit Datumstempel arbeiten würde dann vom gleichen Tag zwei Mal ein File mit gleichem Namen erstellt. Natürlich könnte man nun bei der Erzeugung einen Zeitstempel verwenden. Da aber ein externer Partner nur mit Statischen Filenamen umgehen kann, versuchen wir diese etwas aufwändige Lösung umzusetzen.

Danke und Gruss
Jim
Bitte warten ..
Mitglied: bastla
31.07.2009 um 09:41 Uhr
Hallo Jim-Knopf!

Ein bloßes Anfügen der alten an die neue Datei ließe sich mit einem
01.
type "%%i">>"%ZIPHeute%"
als Ersatz für die Zeilen 15 und 16 machen.

Grüße
bastla
Bitte warten ..
Mitglied: Jim-Knopf
31.07.2009 um 11:05 Uhr
Hallo Bastla

Herzlichen Dank.
Ich hab das Skript kurz auf meine Umgebung angepasst und getestet. Funktioniert alles einwandfrei. Kleiner Schönheitsfehler: der Rename wird auch versucht, wenn keine Dateien vorhanden sind. Stört aber nicht.

Der Batch funktioniert aufgrund der Schlaufe auch, wenn mehrere ältere Dateien rumliegen (sofern die heutige Datei da ist).

@echo off & setlocal
pushd "C:\temp\data\"
set "Pre=xxx_"

set "Heute=%date:~-4%%date:~-7,2%%date:~-10,2%

set "txtHeute=%Pre%%Heute%.txt"

if not exist "%txtHeute%" (
for /f "delims=" %%i in ('dir /b /a-d "%Pre%*.txt" 2^>nul') do ren "%%i" "%txtHeute%"
echo ren "%%i" "%txtHeute%"
popd
goto :eof
)

for /f "delims=" %%i in ('dir /b /a-d "%Pre%*.txt" 2^>nul^|findstr /i /v /c:"%txtHeute%"') do (
type "%%i">>"%txtHeute%"
del "%%i"
)
popd

Macht richtig spass hier. Dir natürlich einen ganz speziellen Dank

Gruss
Jim
Bitte warten ..
Mitglied: bastla
31.07.2009 um 11:14 Uhr
Hallo Jim-Knopf!
Kleiner Schönheitsfehler: der Rename wird auch versucht, wenn keine Dateien vorhanden sind.
Dürfte es eigentlich nicht geben (es wird ja vorher mit "dir" das Vorhandensein einer Datei "xxx_*.txt" geprüft), aber um den Fehler wenigstens zu "verstecken", kannst Du den "ren"-Befehl so schreiben
ren "%%i" "%txtHeute%" 2>nul
- damit wird die Fehlermeldung unterdrückt.

Grüße
bastla
Bitte warten ..
Mitglied: Jim-Knopf
31.07.2009 um 12:29 Uhr
Perfekt! Super Lösung.
Danke.
Jim
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...