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

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, 4400 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 ..
Ähnliche Inhalte
Batch & Shell
Batch - Dateinamen auslesen, umbenennen + dreistellige Zahl vor bisherigen Dateinamen setzen.
Frage von citroendsvierBatch & Shell4 Kommentare

Hallo und guten Morgen, ich möchte für drei Ordner (2011, 2013, 2014) eine Batch schreiben, die die darin enthaltenen ...

Windows Tools
Dateinamen automatisch umbenennen
Frage von chrisschmitt93Windows Tools2 Kommentare

Hallo zusammen, könnte mir freundlicherweise einer ein Skript zukommen lassen , das automatisch alle Ä in AE ,Ö ind ...

Batch & Shell
Dateinamen mit Powershell umbenennen ???
gelöst Frage von lexuraBatch & Shell2 Kommentare

Hallo, Ich benötige ein Script mit dem ich eine MP3 Sammlung umbenennen kann. Die Dateien lauten im Ursprung alle ...

Batch & Shell
Dateinamen Umbenennen nach Ersetzten
gelöst Frage von batchnewbieBatch & Shell9 Kommentare

Hallo, ich experimentiere ein wenig und bin ein einem Punkt, wo ich nicht weiter weiß. Ich lese ein Dateinamen ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 19 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 21 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.