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

Batch zum Umbenennen v. Dateinnamen (mit festem Such-String) und bereits existierenden Dateinamen

Frage Entwicklung Batch & Shell

Mitglied: meandmyself

meandmyself (Level 1) - Jetzt verbinden

10.07.2009, aktualisiert 15:40 Uhr, 4338 Aufrufe, 9 Kommentare

Liebes Forum,

ich weiß, es gibt hier schon viele Beiträge zum Thema Umbenennen von Dateinamen via Batch. Aber die gefundenen Beispiele konnte ich noch nicht richtig anpassen:

In einem feststehenden Verzeichnis befinden sich (DBase)-Dateien nach folgendem Muster:

P0_NEU.DBF ... P6_NEU.DBF und G0_NEU.DBF ... G6_NEU.DBF, diese sollen in P0.DBF bis P6.DBF bzw. G0.DBF bis G6.DBF umbenannt werden. Die Dateien P0.DBF / G0.DBF usw. sind allerdings immer schon vorhanden. Erschwerend kommt hinzu, dass diese von einer Lotus Approach-Datenbank bereits geöffnet sein können. Dies ist an der Endung .adx für die Indexdatei zu erkennen. Die entsprechend geöffneten DBF-Dateien sollen also von der Umbenennung ausgenommen werden.

Was in die richtige Richtung geht ist ein Beitrag von "bastla", denn dieser bespricht das Umbenennen mit gleichzeitigem Überschreiben:

@echo off & setlocal enabledelayedexpansion

for /f "delims=" %%i in ('dir /s /b /a-d "D:\Startpfad\(123)*.xls"') do (
set "Datei=%%~nxi"
echo move "%%i" "%%~dpi!Datei:~5!"
)

Leider reichen meine Batchprogrammierkenntnisse für die gestellte Aufgabe nicht aus, für Hilfe bin ich dankbar.

Gruß,
meandmyself
Mitglied: 80220
10.07.2009 um 17:09 Uhr
bastla ist schon gut. Vor Allem verwendet er grundsätzlich für jeden noch so kleinen Code-Schnipsel die Formatierungshilfe.
Bitte warten ..
Mitglied: Biber
10.07.2009 um 17:38 Uhr
Moin duunddyself,

ich verstehe an Deiner (technisch durchaus lösbaren) Anforderung zwei Details nicht.

1)
Du schreibst: "..die eine oder andere DBF-Datei könnte schon ...von Lotus Approach geöffnet sein"?
Versteh ich nicht. In ein und demselben Verzeichnis sind diese *.DBF-Dateien, die mal von dBASE, mal von Lotus und mal unter dem Namen P0.dbf, mal unter dem Namen P0_neu.dbf erwartet werden (oder gar irgendwo unter diesem Namen in eirgendwelchem Appz-Sourcecode angesprochen werden) ... und auf diesem offenen Herzen willst Du einen Batch rumrödeln lassen?

2) wenn es doch nur diese paar Drömel-Dateien P0.dbf...P6.dbf bzw. G0dbf...G6.dbf sind, die eigentlich auch nicht alle umbenamst werden müssen... warum machst Du das nicht manuell? Dann wärst Du doch schon seit 15:19h fertig.
Oder hast Du diese merkwürdige Lösung bei 500 Kunden draußen, die Du alle nur per Update-Diskette erreichst?

Grüße
Biber
Bitte warten ..
Mitglied: meandmyself
10.07.2009 um 17:55 Uhr
Hallo Biber,

zu 1) in diesen Ordner werden regelmäßig (deswegen Batch) Exportdateien aus einer Access-Datenbank im DBase-Format für eine Lotus Datenbank abgespeichert (P0...P6_NEU.DBF/G0...G6_NEU.DBF). Da die auf die P?.DBF / G?.DBF zugreifende Lotus Datenbank nicht vorhersehbar diese geöffnet hat ist dann das Umbenennen natürlich nicht möglich und auch nicht erwünscht.

zu 2) klar, machen wir ja auch von Hand. Aber geschmeidiger wäre es schon per Batch, da es eigentlich täglich gemacht werden muss.

Danke und Gruß

meandmyself
Bitte warten ..
Mitglied: Biber
10.07.2009 um 18:14 Uhr
Moin DuIch&Ich,

in diesem Fall wäre folgender Oneliner vom CMD-Prompt (im verzeichnis der DBF-Dateien gestartet) der proof-of-concept
[ das ">" stellt meinen Prompt dar; nicht mit eingeben]
01.
for %i in (??_neu.dbf) do @echo if exist p%i.dbf if not exist p%i.adx move /y p%i_neu.dbf p%i.dbf
Diese Zeile sollte alle ??_neu.DBF-Dateien "umbenennen" bzw die vorhandenen ?[0-6].dbf-Dateien ersetzen.
Sofern keine ?[0-6].adx-Datei dagegenspricht.

Falls das das gewünschte Ergebnis ECHOed, dann in einen Batch schreiben;
01.
@echo off & PUSHD "X:\DbfVerzeichnis] 
02.
for %%i in (??_neu.dbf) do if exist p%%i.dbf if not exist p%%i.adx move p%%i_neu.dbf p%%i.dbf 
03.
POPD
Der MOVE-Schalter /Y ist im Batch automatisch gesetzt und braucht nicht angegeben werden.

Grüße
Biber
Bitte warten ..
Mitglied: meandmyself
10.07.2009 um 18:30 Uhr
Hi Biber,

hab´s am Prompt ausprobiert, haut noch nicht so ganz hin, er wirft mir dann aus:

if exist pP0_NEU.dbf.dbf if not exist pP0_NEU.dbf.adx move /y pP0_NEU.dbf_neu.db
f pP0_NEU.dbf.dbf

thanx
Bitte warten ..
Mitglied: Biber
10.07.2009 um 18:47 Uhr
Upps, sorry...

Da hatte ich zwei Varianten durcheinandergeworfen... eine mit "FOR ..IN (dateimaske)" und eine "FOR /L in (loop)"

Nochmal die proof-of-concept-Zeile einer ungemischten Variante [mit den Ergebniszeilen darunter]:
01.
>for /l %i in (0,1,6) do @echo if exist p%i.dbf if not exist p%i.adx if exist p%i_neu.dbf move /y p%i_neu.dbf p%i.dbf 
02.
if exist p0.dbf if not exist p0.adx if exist p0_neu.dbf move /y p0_neu.dbf p0.dbf 
03.
if exist p1.dbf if not exist p1.adx if exist p1_neu.dbf move /y p1_neu.dbf p1.dbf 
04.
if exist p2.dbf if not exist p2.adx if exist p2_neu.dbf move /y p2_neu.dbf p2.dbf 
05.
if exist p3.dbf if not exist p3.adx if exist p3_neu.dbf move /y p3_neu.dbf p3.dbf 
06.
if exist p4.dbf if not exist p4.adx if exist p4_neu.dbf move /y p4_neu.dbf p4.dbf 
07.
if exist p5.dbf if not exist p5.adx if exist p5_neu.dbf move /y p5_neu.dbf p5.dbf 
08.
if exist p6.dbf if not exist p6.adx if exist p6_neu.dbf move /y p6_neu.dbf p6.dbf
Das wäre die Zeile für die P[0-6].DBFs... ich denke, das Muster ist übertragbar auf die G[0-6].dbfs

Also würde ich zu einem einem Batch mit zwei FOR-Anweisungs-Zeilen raten.
Geht natürlich auch mit einer weiteren FOR-Anweisung für den Präfix "P" und "G", aber wird dadurch nicht lesbarer.

Alternativ ginge auch noch:
01.
>for %i in (p0,p1,p2,..., g5,g6) do @echo if exist %i.dbf if not exist %i.adx if exist %i_neu.dbf move /y %i_neu.dbf %i.dbf 
02.
if exist p0.dbf if not exist p0.adx if exist p0_neu.dbf move /y p0_neu.dbf p0.dbf 
03.
if exist p1.dbf if not exist p1.adx if exist p1_neu.dbf move /y p1_neu.dbf p1.dbf 
04.
if exist p2.dbf if not exist p2.adx if exist p2_neu.dbf move /y p2_neu.dbf p2.dbf 
05.
if exist ....dbf if not exist ....adx if exist ..._neu.dbf move /y ..._neu.dbf ....dbf 
06.
if exist g5.dbf if not exist g5.adx if exist g5_neu.dbf move /y g5_neu.dbf g5.dbf 
07.
if exist g6.dbf if not exist g6.adx if exist g6_neu.dbf move /y g6_neu.dbf g6.dbf
Grüße
Biber
Bitte warten ..
Mitglied: meandmyself
10.07.2009 um 19:02 Uhr
Großartig Biber,

das funktioniert offenbar! Kleine Nachfrage: ich hab´jetzt in einer Batch:

>@echo off & PUSHD "C:\temp]
for %%i in (p0,p1,p2,p3,p4,p5,p6,g1,g2,g3,g4,g5,g6) do if exist %%i.dbf if not exist %%i.adx if exist %%i_neu.dbf move /y %%i_neu.dbf %%i.dbf
POPD

Ich erhalte dann "Das System kann den angegebene Pfad nicht finden." Stimmt was mit der Syntax in der ersten Zeile noch nicht?

Vielen Dank und feine Grüße

immer noch ichundmichselbst
Bitte warten ..
Mitglied: Biber
10.07.2009 um 19:50 Uhr
Menno, Dich&Dich,

jetzt reichts mir aber für diese Woche auch mit meinen blöden Tippfehlern...*grmpff*

Bei dem Befehl PUSHD sollte natürlich Dein Lw:\Verzeichnis ohne (oder wenn erforderlich mit) Anführungszeichen stehen.

Also statt PushD "C:\temp] richtiger
PushD c:\temp
-oder-
PushD "c.\Eigene Dateien und Krempel\usAndweBoth"

Anführungszeichen müssen sein bei "Leerzeichen im Pfad" , dürfen aber auch sonst immer genommen werden.

Grüße an Euch beide und schönes Wochenende
Biber
Bitte warten ..
Mitglied: meandmyself
10.07.2009 um 19:57 Uhr
Mille grazie, Biber, perfetto!

Dir auch ein leckeres WoEnde von uns

mm (=meandmyself)
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst 1 PDF duplizieren und umbenennen nach CSV mittels Batch (5)

Frage von Kalisser zum Thema Batch & Shell ...

Batch & Shell
gelöst Wlan-adapter such algorithmus in batch (7)

Frage von TicoWrite zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (9)

Frage von clragon zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...