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 Dateien umbenennen ohne dabei vorhandene Dateien zu überschreiben.

Mitglied: hellfighter

hellfighter (Level 1) - Jetzt verbinden

06.06.2005, aktualisiert 05.04.2006, 12854 Aufrufe, 7 Kommentare

Hi,

Das Szenario:
1. Eine Batchdatei holt von einem FTP-Server Dateien eines bestimmten Types ab (ala *.txt) und speichert diese in ein Ordner "input". Diese Dateien beginnen mit einem Datum (yyyymmdd), gefolgt von weiteren 18 unbestimmten Zeichen und der Dateiendung.
2. Zur Weiterverarbeitung mit einem anderen System benötige ich allerding nur die letzte Datei mit einem festen Dateinamen (z.b. neudatei20050606.txt) im Verzeichnis "output".

Das Problem:
Normalerweise kommt vom FTP am Tag nur eine Datei die umbenannt werden muss. Es kann aber auch sein das es zwei oder mehr sind. In diesem Fall soll nur die letzte und damit neuste den festen Dateinamen erhalten und alle anderen bzw älteren des Tages mit einer Nummerierung versehen werden (zb: neuedatei20050606-1.txt, neuedatei20050606-2.txt). Bereits vorhandene Dateien sollten also nicht überschireben werden sondern umnummeriert werden.
Ein weiteres Problem was ich dabei hab, das auf dem FTP auch mit unter mehrere Dateien der vergangen Tage sein können. Das ganze müsste also abhängig vom Datum der Dateienamen sein (die ersten acht Zeichen).

Meine Frage:
Also ich hab es nun schon mal soweit hinbekommen das er die Dateien abholt und die Dateinamen in eine Datei schreibt (die neuste zuerst). Der Rest bereitet mir allerding Kopfschmerzen zumal als Scriptsprache in meinem Fall nur Batch zum Einsatz kommen darf.
Hat jemand eine Idee wie ich das Problem lösen könnte?

Danke und Gruß
Hellfighter
Mitglied: Biber
06.06.2005 um 13:23 Uhr
Moin Hellfighter,
ein, zwei Rückfragen noch zum Szenario, dann gern die Lösung:

1) Die Batch, die die Dateien vom FTP-Server holt:
?Wird die manuell gestartet oder als Task? Einmal am Tag oder unregelmäßig?

2) Brauchst Du die umbenannten Dateien am gleichen Tag oder erst morgen die von heute?
Sprich: muss berücksichtigt werden, dass eine bereits kopierte und umbenannte Datei nun doch nicht die aktuellste und erhaltenswerteste ist?

3) Willst Du den neuen Batch als Task laufen lassen oder manuell/unregelmäßig oder direkt vor und von der angedeuteten Weiterverarbeitung?

Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: hellfighter
06.06.2005 um 15:44 Uhr
Hi,

das ging ja schnell!

1) Also in der Testphase wird das Script manuell ausgeführt und das wohl auch eher unregelmässig. Wenn ich dann den die Zustimmung bekomme, kann alles als Task laufen lassen.

2) Mhh ich glaub ich hab das vorhin nicht ganz so gut Erklärt - Ich versuch es deshalb noch mal.
a) Das Script holt die Datein mit der Endung *.txt hab und löscht sie auf dem Server. Normalerweise sind ist da auch nur eine Dartei da mit dem Erstellungsdatum (im Regelfall das aktuelle Datum).
b) Die aktuellste Datei wir umbenannt in ein festen Dateinamen: Z.B. :neuedatei20050606.txt das enthaltene Datum wird aus dem der Orginaldatei übernommen, da die das Datum bereits beinhalten. (orginal: yyyymmdd18Zeichen.txt)
c) wenn die Datei verarbeitet wurde wird Sie gelöscht.

So nun kann es aber sein das auf dem FTP mal Dateien von zwei Tagen liegen (wenn es an einem Tag mal Probleme gab und dies Nachrereicht wird) oder aber es kommen zwei Dateien für ein Tag (wenn Infos nachreeicht werden müssen)
In diesen Fällen sollen die älteren Dateien beibehalten werden und nummeriert werden.

Hierzu ein Beispiel:

Auf dem FTP liegen vier Dateien die abgeholt wurden und anschliessend sortiert wie folgt in einer Datei festgehlaten werden:
20050606dedgfzeg1.txt
20050606djdvsdpb2.txt
20050605vdfvffvsd1.txt
20050605hnnhkggo2.txt

Das Script macht daraus folgendes:
neuedatei200506.txt
neuedatei200506-1.txt
neuedatei200505.txt
neuedatei200506-1.txt

Soweit kein direktest Problem - glaub ich zumindest Wenn nun aber für den aktuellen Tag noch eine Datei nachgereicht wird müss das script vor dem Umbenennen Prüfen ob es schon eine gibt:

Die neue Datei vom FTP:
20050606srgiffbfi4.txt

Das Script merkt beim Umbenennen das es schon eine "neuedatei20050606.txt" gibt und nennt diese vorher um. Mit folgendem Ergebniss:

neuedatei200506.txt (die neustet Datei von FTP)
neuedatei200506-1.txt (die vormals neuste Datei)
neuedatei200506-2.txt (die älteste Datei des Tages)

3) Später soll das ganze per Task laufen aber unamhängig von der Weiterverarbeitung.

Ich hoffe das war so besser erklärt :- |

Gruß
Hellfighter
Bitte warten ..
Mitglied: Biber
07.06.2005 um 11:08 Uhr
Okay, Hellfighter,

den Batch würde ich wie folgt skizzieren:
(ein paar Pfade musst Du anpassen. die kenn ich nicht)


01.
::-----Inhalt ftpcopy.bat 
02.
@echo off 
03.
Set datestring= 
04.
set filename= 
05.
set inputdir=D:\temp\input\ 
06.
set targetdir=D:\temp\next\ 
07.
 
08.
:: Die Datei "ftpfiles.lst" in der nächsten Zeile soll die Dateinamen der abgeholten FTPFiles 
09.
:: enthalten. Wie immer die heißen mag bei Dir 
10.
 
11.
if not exist %inputdir%ftpfiles.lst goto end 
12.
for /F %%i in (%inputdir%ftpfiles.lst) do call :loop %%i 
13.
:: und hier sollte auch die Datei "ftpfiles.lst" gelöscht werden oder auf Länge Null gesetzt 
14.
:: PLEASE UNCOMMENT, IF TESTED  del %inputdir%ftpfiles.lst 
15.
goto end 
16.
 
17.
 
18.
:loop 
19.
set Filename=%1 
20.
Set Datestring=%Filename:~0,8% 
21.
if defined DEBUGBATCH echo %datestring% 
22.
if exist %targetdir%neuedatei%datestring%.txt ( 
23.
   
24.
  if exist %targetdir%neuedatei%datestring%-4.txt (echo "Worst-Case war nicht worst genug!") && pause 
25.
  if exist %targetdir%neuedatei%datestring%-4.txt goto end 
26.
  if exist %targetdir%neuedatei%datestring%-3.txt rename %targetdir%neuedatei%datestring%-3.txt neuedatei%datestring%-4.txt 
27.
  if exist %targetdir%neuedatei%datestring%-2.txt rename %targetdir%neuedatei%datestring%-2.txt neuedatei%datestring%-3.txt 
28.
  if exist %targetdir%neuedatei%datestring%-1.txt rename %targetdir%neuedatei%datestring%-1.txt neuedatei%datestring%-2.txt 
29.
  rename %targetdir%neuedatei%datestring%.txt neuedatei%datestring%-1.txt 
30.
31.
 
32.
  copy %inputdir%%filename% %targetdir%neuedatei%datestring%.txt >nul 
33.
  del %inputdir%%filename% 
34.
  
35.
:end 
36.
 
37.
::-----ende Inhalt ftpcopy.bat
P.S. Die "if exist..." Zeilen sind tatsächliche je eine Zeile, auch wenn es hier aus dem Bildschirm umgebrochen wird bei "neuedatei..."



Hope it Helps

Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: hellfighter
07.06.2005 um 11:54 Uhr
GODLIKE!

Das funktioniert einwandfrei und macht genau das was es soll - MIT BATCH!!!!!

BIG THX an dich Biber.

Ich muss eingestehen das ich überrascht bin was mit Windows noch alles geht. Ich hab immer auf Linux Shellscripting gesetzt und das MS Zeugs ignorriert. Offenbar ein Fehler wie ich jetzt erfahren musste.
Gibt es gute Lektüren zu Batch wo man sich sowas aneigenen kann? Schaden kann es zumindest nicht zwischen den Welten zu wandern ;)

Gruß
Hellfighter
Bitte warten ..
Mitglied: Biber
07.06.2005 um 12:10 Uhr
Gute Lektüren zu Batch? Ich hab leider noch keine gefunden.

Und was z.B mit den neuen "Befehlserweiterungen" von Win2000/XP geht, ist zwar formal korrekt in der M$-Hilfe beschrieben, aber Beispiele fehlen da auch.

Aber wenn man/frau sich damit mal ein Stündchen auseinandersetzt, sind erstaunliche Sachen möglich.. *gg

Da ich öfters mal die Rechner wechsele, habe ich beispielsweise immer eine inzwischen dreiseitige Batchdatei griffbereit, die ich ins Autostart-Verzeichnis kopiere.

Die macht mir jeden Rechner "wiedererkennbar": alle Laufwerke so gemappt, wie ich es blind erwarte, alle Pfade, alle Umgebungsvariablen bis runter zu meinem Lieblings-Dos-Prompt...etc...

Wir können ja mal abwarten, Hellfighter, ob jemand gute Lektüre dazu kennt und postet, wenn nicht, trümmer ich mal ein paar kleine HOW-TOs zusammen und poste die.

Schönen Tach Dir

Frank / der Biber aus Bremen
Bitte warten ..
Mitglied: hellfighter
07.06.2005 um 13:55 Uhr
Hi,

ich nochmal. Hab gerade mein bzw. DEIN Script vorgestellt und da das so problemlos funktionierte gleich ein paar Änderungen aufgedrückt bekommen.

Nun soll einfach bei bereits vorhanden Datei die NEUE angehängt werden. Was ansich sogar einfacher ist als die Lösung zu vor.

Der copy-Befehl kann ja auch Dateien aneinander hängen ala "copy datei1 + datei2 datei3" weshalb ich dein Script wie folgt abgeändert hab:

-----Inhalt ftpcopy.bat

@echo off
Set datestring=
set filename=
set inputdir=D:\temp\input\
set targetdir=D:\temp\next\

:: Die Datei "ftpfiles.lst" in der nächsten Zeile soll die Dateinamen der abgeholten FTPFiles
:: enthalten. Wie immer die heißen mag bei Dir

if not exist %inputdir%ftpfiles.lst goto end
for /F %%i in (%inputdir%ftpfiles.lst) do call :loop %%i
:: und hier sollte auch die Datei "ftpfiles.lst" gelöscht werden oder auf Länge Null gesetzt
:: PLEASE UNCOMMENT, IF TESTED del %inputdir%ftpfiles.lst
goto end


:loop
set Filename=%1
Set Datestring=%Filename:~0,8%
if defined DEBUGBATCH echo %datestring%
if exist %targetdir%neuedatei%datestring%.txt (


copy /A /Y %inputdir%%filename% + %targetdir%neuedatei%datestring%.txt %targetdir%neuedatei%datestring%.txt


::if exist %targetdir%neuedatei%datestring%-4.txt (echo "Worst-Case war nicht worst genug!") && pause
::if exist %targetdir%neuedatei%datestring%-4.txt goto end
::if exist %targetdir%neuedatei%datestring%-3.txt rename %targetdir%neuedatei%datestring%-3.txt neuedatei%datestring%-4.txt
::if exist %targetdir%neuedatei%datestring%-2.txt rename %targetdir%neuedatei%datestring%-2.txt neuedatei%datestring%-3.txt
::if exist %targetdir%neuedatei%datestring%-1.txt rename %targetdir%neuedatei%datestring%-1.txt neuedatei%datestring%-2.txt
::rename %targetdir%neuedatei%datestring%.txt neuedatei%datestring%-1.txt
)


else (
copy %inputdir%%filename% %targetdir%neuedatei%datestring%.txt >nul
)


del %inputdir%%filename%

:end

-----ende Inhalt ftpcopy.bat


Nur scheint das nicht zu gehen. Es kommt immer 3x "Das System kann das angegebene Laufwerk nicht finden." pro Copy-Befehl und der ELSE-Befehl scheint bei Batch auch nicht zugehen obwohl ich gelesen hab das es den ELSE-Befehl geben soll (undokumentiert).

Das OS ist Windows 2000 PRO SP4 und wird später Windows 2000 AS sein - Im Falle das diese Angaben von Bedeutung sind.


EDIT
Das mit dem ELSE hab ich gelöst - Das muss in der Zeile mit der schliessenden If-Klammer stehen.
/EDIT

EDIT2
Das mit den Tutorials kann ich nur begrüßen. Alles was ich bis jetzt gefunden hab kann man nur als Einsteiger-Tutorials bezeichnen und die helfen mir nicht viel weiter.
/EDIT2

Gruß
Hellfighter
Bitte warten ..
Mitglied: TommyC
05.04.2006 um 12:16 Uhr
Hi.

Den ersten IF hst Du mit Der Klammer gechlossen, das ELSE steht zwei Zeilen zu tief. ELSE Muss zwischen den Klammern Stehen in einer eigenen Zeile.

IF bla bla (

) ELSE (

)

Rück den ELSE nach oben.
Sollte Abhilfe schaffen.
Bitte warten ..
Ähnliche Inhalte
VB for Applications

Vbs - Datei wenn vorhanden (alle Laufwerke) umbenennen

gelöst Frage von aletriVB for Applications4 Kommentare

Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists("C:\Dir\File.xxx") Then fso.MoveFile "C:\Dir\File.xxx" , "C:\Dir\File.xxx" ElseIf Not fso.FileExists("C:\Dir\File.xxx") Then End If Wie kann ...

Batch & Shell

Dateien Umbenennen

gelöst Frage von PLBot85Batch & Shell6 Kommentare

Hi, ich habe einen Ordner wo mehrer Dateien drin liegen. 20150316_121757_92636382965528_WMA1847GK62_TDOBB112.ddd 20150314_085730_73826383950256_WMA18263926_TDOBB236.ddd etc Die sollen jetzt mittels einer Batchdatei ...

Backup

Nur korrupte Dateien aus dem Backup überschreiben

gelöst Frage von MichiD41Backup4 Kommentare

Hallo Zusammen, ich habe folgende Situation: Vor einigen Tagen viel uns auf , dass das Filesystem unseres Gruppenlaufwerkes (1,3 ...

Windows Tools

Robocopy . Datei im Zielverzeichnis nur überschreiben, wenn neuer

Frage von gnrmarcelWindows Tools7 Kommentare

Hallo, ich habe hier in der Firma, ältere USB Festplatten, wo das Gleiche (Ordner struktur inkl. Dateien) drauf ist ...

Neue Wissensbeiträge
Windows 10

Blackscreen nach dem Update von 1808 auf 1809 wenn der Rechner aus dem Standby gestartet wird

Tipp von FSX2010 vor 1 StundeWindows 10

Habt ihr den Samsung Teriber Samsung_NVM_Express_Driver_3.0 installiert habt muss dieser für 1809 deinstalliert werden da dieser wohl nicht kompatibel ...

Utilities
Teamviewer 14 Verbindungsprobleme mit Proxy
Tipp von PeterleB vor 1 TagUtilities

Nach dem Umstieg von Version 13 auf 14 wollte sich TV nicht mehr mit dem Netz verbinden, ignorierte offenbar ...

Administrator.de Feedback
Unsere Datenbank wurde umgestellt
Information von Frank vor 1 TagAdministrator.de Feedback5 Kommentare

Hallo User, ich habe in der Nacht unsere Datenbank umgestellt. D.h. neue Version (MySQL 8) und andere Örtlichkeit. Sollte ...

Sonstige Systeme
Es war einmal ein BeOS - Wer erinnert sich noch?
Information von BassFishFox vor 4 TagenSonstige Systeme8 Kommentare

Hallo, Bin gerade ueber Haiku gestolpert, von dessen Existenz als "Nachfolger des BeOS" ich wusste nur mich nie wirklich ...

Heiß diskutierte Inhalte
Windows 10
Programm unter Windows 10 automatisch mit administrativen Rechten starten
Frage von GrafmulderWindows 1021 Kommentare

Hallo zusammen! Zur Situation: Ich benutze Windows 10 Pro für Workstations (Build 1803) mit zwei Konten. Einem Administratorkonto und ...

Vmware
Gebrauchten ESXi- Server verkaufen: Festplatten DSGVO-konform löschen?
Frage von l.scheperVmware20 Kommentare

Hallo, wir möchten einen gebrauchten FUJITSU Server verkaufen. Auf dieser Maschine ist noch ein installiertes ESXi 5.1 und ne ...

LAN, WAN, Wireless
Empfehlung Powerline Adapter
Frage von AgilolfingerLAN, WAN, Wireless16 Kommentare

Hallo Zusammen, ich brauche eine Empfehlung von euch. Ich möchte in einem privaten Haushalt eine Powerline Lösung einrichten. Allerdings ...

Router & Routing
Dediziertes ISP -Routing
gelöst Frage von niLuxxRouter & Routing13 Kommentare

Liebe Community, Ich hätte eine kurze Frage an euch. Durch verschiedene Umstände kann es nun sein, dass sich zwei ...