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

String aus Dateinamen abfragen und ändern per Batch

Frage Entwicklung Batch & Shell

Mitglied: chainsaw

chainsaw (Level 1) - Jetzt verbinden

05.02.2009, aktualisiert 11:23 Uhr, 9074 Aufrufe, 8 Kommentare

Hallo Profis,

Ich hab hier ein Problem und komme mit meinen kleinen Batch-Kenntnissen nicht weiter.

Folgende Situation: Ich habe in einem Verzeichnis zig Dateien die so aussehen:

1GZTEST200902100010004402nnW00.dat

Diese möchte ich jetzt per Batch renamen. Bestimmte Teile des
Dateinamens sollen ersetzt werden, einige sollen so bleiben,
einige dürfen ganz verschwinden.

Eine fertige Datei sollte z.B. so aussehen:

GZ.TEST.20090210.001000.44.02.W.dat

Die ersten drei Namensteile kann ich mit set /p var ja ganz gut
abfragen und umbenennen (also GZ, TEST und das Datum.

Aber dann beginnen meine Schwierigkeiten: Den Abschnitt 001000
und der Buchstabe W sind immer verschieden und können z.B. bis 099000 gehen
und der Buchstabe W kann irgendeiner aus dem Alphabet sein.
Wie mache ich das nun, dass ich diese beiden Angaben im Dateiname
unverändert bleiben und im umbenannten File wieder so eingesetzt werden?

Wäre toll wenn ihr mit weiterhelfen könnet - das würde mir wahnsinnig
viel Arbeit sparen, denn eine externe Software darf ich nicht verwenden,
bzw. installieren.

Danke und Gruß
Andi
Mitglied: bastla
05.02.2009 um 11:41 Uhr
Hallo chainsaw und willkommen im Forum!
Hallo Profis,
Falls Du auch mit mir vorlieb nimmst , hätte ich etwa folgenden Ansatz zu bieten:
01.
@echo off & setlocal 
02.
set "Dateien=D:\Daten\*.dat" 
03.
set "T1=GZ" 
04.
set "T2=TEST" 
05.
set "T3=%date:~-4%%date:~-7,2%%date:~-10,2%" 
06.
 
07.
for /f "delims=" %%i in ("%Dateien%") do call :ProcessFile "%%i" 
08.
goto :eof 
09.
 
10.
:ProcessFile 
11.
set "Alt=%~n1" 
12.
set "T4=%Alt:~15,6%" 
13.
set "T5=%Alt:~21,2%" 
14.
set "T6=%Alt:~23,2%" 
15.
set "T7=%Alt:~27,1%" 
16.
 
17.
echo ren %1 "%T1%.%T2%.%T3%.%T4%.%T5%.%T6%.%T7%%~x1" 
18.
goto :eof
Das "echo" vor dem "ren" soll ein gefahrloses Testen erlauben, da so der Umbenennungsbefehl jeweils nur angezeigt wird. Die Variablen %T1% und %T2% können dann natürlich wieder per "set /p" befüllt werden, und das Suchmuster "D:\Daten\*.dat" kann vielleicht auch noch etwas eingeschränkt werden (außer, es sollen ohnehin alle .dat-Dateien des Verzeichnisses bearbeitet werden).

Grüße
bastla
Bitte warten ..
Mitglied: chainsaw
05.02.2009 um 12:29 Uhr
Hallo bastla

Falls Du auch mit mir vorlieb nimmst

Ich würde sagen das das ganz klar Profimäßig ist was du da gepostet hast! Und so schnell - unglaublich.

Ich versteh ja nicht wirklich was da alles drinsteht, aber eine Frage habe ich noch:

Die Geschichte mit "%Alt:~21,2" usw. beschreibt das die Anzahl der Zeichen von links oder so?
Damit kann ich garnichts anfangen.
Die Stelle nach dem Datum hat z.B. eine "0" zuviel, und heißt 000100 statt 001000 muß ich da an den Werten spielen bis es passt, oder wo veränder ich da was?

Trotzdem sehr herzlichen Dank für deine schnelle Hilfe!

Gruß Andi
Bitte warten ..
Mitglied: bastla
05.02.2009 um 12:46 Uhr
Hallo chainsaw!

Die Geschichte mit "%Alt:~21,2" usw. beschreibt das die Anzahl der Zeichen von links oder so?
Der erste Wert gibt an, wie viele Zeichen (von links) übersprungen werden sollen, der zweite Wert, wie viele danach verwendet werden sollen - für die (nicht benötigte) 1 am Anfang des Dateinamens müsstest Du daher zB die Werte 0 (keine Stellen überspringen) und 1(eine Stelle verwenden) angeben.

Die Stelle nach dem Datum hat z.B. eine "0" zuviel, und heißt 000100 statt 001000 muß ich da an den Werten spielen bis es passt, oder wo veränder ich da was?
Bei meinem Test mit Deinem geposteten Beispiel
1GZTEST200902100010004402nnW00.dat 
               ^    ^ 
1234567890123456789012345678901234
war das Ergebnis zwar eigentlich wunschgemäß (nach den ersten 15 Zeichen sind die nächsten 6 Zeichen "001000"), aber Du kannst die Zuweisung zu %T4% ja in Zeile 12 entsprechend anpassen ...

Grüße
bastla
Bitte warten ..
Mitglied: chainsaw
05.02.2009 um 12:49 Uhr
Hallo nochmal ich,

also das mit der Stelle hab ich nach dem Try & Error-Verfahren hinbekommen.

Aber der batch benennt immer nur eine Datei um und bringt dann den
Fehler "Datei existiert bereits oder Datei konnte nicht gefunden werden".

Wäre ein Lösungsansatz, die renamte Datei in ein Out-Verzeichnis zu schieben?

Danke und Gruß ANdi
Bitte warten ..
Mitglied: bastla
05.02.2009 um 12:58 Uhr
Hallo chainsaw!
Aber der batch benennt immer nur eine Datei um und bringt dann den Fehler "Datei existiert bereits oder Datei konnte nicht gefunden werden".
Wäre ein Lösungsansatz, die renamte Datei in ein Out-Verzeichnis zu schieben?
Soferne durch das Weglassen von Informationen gleiche Dateinamen entstehen, würde das auch nicht helfen - daher vielleicht einmal mit folgender alternativen Zeile 17
>>D:\RenLog.txt echo ren %1 "%T1%.%T2%.%T3%.%T4%.%T5%.%T6%.%T7%%~x1"
ein Protokoll der Simulation erstellen und die neu entstehenden Dateinamen vergleichen bzw als (ungetesteter) Ersatz der Zeile 17 mit
if not exist "%~dp1\%T1%.%T2%.%T3%.%T4%.%T5%.%T6%.%T7%%~x1" ( 
    ren %1 "%T1%.%T2%.%T3%.%T4%.%T5%.%T6%.%T7%%~x1" 
) else ( 
    echo %1 -- ^>"%T1%.%T2%.%T3%.%T4%.%T5%.%T6%.%T7%%~x1" existiert bereits! 
)
anzeigen lassen, bei welchen Dateien es eine Namengleichheit geben würde.

Grüße
bastla
Bitte warten ..
Mitglied: chainsaw
05.02.2009 um 13:21 Uhr
Hallo bastla,

Jetzt bin ich völlig verwirrt und überfordert. Die Dateinamen sind eigentlich nicht gleich, denn Namen mit gleichem Datum und gleicher Seitenzahl unterscheiden sich ja durch den Buchstaben. Somit gibt`s eigentlch keine gleichen Dateinamen.


Nach dem rename Befehl habe ich jetzt folgendes eingefügt:

ren %1 "%zvar%.%avar%.%dvar%.%T4%.44.05.%T7%%~x1"
move D:\Daten\*_*.dat D:\Daten\out

if exist "%Dateien%" dir /b /A:-d "%Dateien%">nul 2>nul && goto :ProcessFile
if exist "%Dateien%" dir /b /A:-d "%Dateien%">nul 2>nul || goto :eof

Ich kann die Daten vorneweg auch GZ_ benennen und frage dann das Underline ab um wegzumoven.

if exist "%Dateien%" dir /b /A:-d "%Dateien%">nul 2>nul && goto :ProcessFile
if exist "%Dateien%" dir /b /A:-d "%Dateien%">nul 2>nul || goto :eof

Das stammt übrignes auch von dir hier aus dem Forum
und jetzt gehts. Ich bin glücklich und bedanke mich für deine Geduld und deine Hilfe! Echt Profimäßig!

Danke und Gruß
Andi
Bitte warten ..
Mitglied: bastla
05.02.2009 um 15:43 Uhr
Hallo chainsaw!

Sorry - in meinem nun wirklich nicht profimäßigen Ansatz ganz oben (war leider etwas abgelenkt) hätten die Zeile 2 und 7 richtig so aussehen sollen:
set "Dateien=D:\Daten"  
... 
for /f "delims=" %%i in ('dir /b "%Dateien%\*.dat"') do call :ProcessFile "%Dateien%\%%i"
Damit sollte dann auch ohne weitere Verrenkungen der Rest des Batches funktionieren ...

Den Hinweis "ungetestet" hatte ich übrigens nicht dabei, weil ich es ja mit einer Datei versucht hatte (mir ging es vorrangig um die Zerlegung des Namens) ...

Grüße
bastla
Bitte warten ..
Mitglied: chainsaw
06.02.2009 um 15:33 Uhr
Hallo bastla,

Perfekt! So klappt`s noch besser. Vielen Dank!
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateiname über Batch ändern
gelöst Frage von c64b311ee9Batch & Shell6 Kommentare

Hallo liebe Community, folgendes Problem!: Ich habe einen Ordner mit 500 PDF Dateien. Diese sind nach folgendem Schema aufgebaut. ...

Batch & Shell
Dateinamen mit Batch-Datei ändern - Problem
gelöst Frage von fffffuuuuuuuhhhhBatch & Shell9 Kommentare

Hallo zusammen, ich, stelle regelmäßig .mp3-Dateien her, die folgendermaßen von meinem Audioprogramm beschriftet wird: Das Ergebnis soll aber folgendermaßen ...

Batch & Shell
Teile eines Dateinamens ändern mit Batch Datei
gelöst Frage von fffffuuuuuuuhhhhBatch & Shell4 Kommentare

Hallo, ich, stelle regelmäßig .mp3-Dateien her, die folgendermaßen von meinem Audioprogramm beschriftet wird: Interpret - Titel _xxxxxx000.mp3 die x stehen für eine ...

Batch & Shell
Dateiname ändern, und auch in Datei ändern. evt mit einem Batch
gelöst Frage von helmuthelmut2000Batch & Shell18 Kommentare

Hallo, Ich möchte folgendes umsetzten: Ich habe ein paar Ordner mit Dateien Die Dateien haben folgende Dateinamen, ABC123456.doc ABC123457.doc ...

Neue Wissensbeiträge
Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 11 MinutenWindows 10

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 3 StundenMicrosoft Office13 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Erkennung und -Abwehr

Sicherheitslücke Spectre und Meltdown: Status prüfen

Anleitung von Frank vor 9 StundenErkennung und -Abwehr2 Kommentare

Nach all den Updates der letzten Woche sollte man unbedingt auch den Status prüfen, ob die Sicherheitslücken Spectre, Meltdown ...

Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 1 TagMicrosoft Office10 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner15 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...

Batch & Shell
Dateien verschieben mit batch
gelöst Frage von michi-ffmBatch & Shell13 Kommentare

Hallo Zusammen hat jemand evtl eine Idee? Zunächst hier das Skript: Leider werden keine UNC-Pfade unterstüzt, kann mir jemand ...