Dateiname ändern, und auch in Datei ändern. evt mit einem Batch
Hallo,
Ich möchte folgendes umsetzten:
Ich habe ein paar Ordner mit Dateien
Die Dateien haben folgende Dateinamen,
ABC123456.doc
ABC123457.doc
ABC123458.doc
usw.
jetzt steht in dem Text der Datei (und auch in anderen Dateien) auch die
ABC123456.doc
ABC123457.doc
ABC123458.doc
usw
Jetzt mein Problem,
Wie muss so eine Batch Datei aussehen die aus dem
ABC123456.doc ABC123457.doc ABC123458.doc usw
das ABC entfernt, und auch in den Dateien muss das ABC1234.......doc geändert werden in nur
123456.doc
123457.doc
123458.doc
usw.
Geht das überhaupt mit einer Batch Datei.
Muss da der Dateinamen in eine Variable geschrieben werden und dann verändert werden dann mit suchen und ersetzen.....
Gruß
Helmut
Ich möchte folgendes umsetzten:
Ich habe ein paar Ordner mit Dateien
Die Dateien haben folgende Dateinamen,
ABC123456.doc
ABC123457.doc
ABC123458.doc
usw.
jetzt steht in dem Text der Datei (und auch in anderen Dateien) auch die
ABC123456.doc
ABC123457.doc
ABC123458.doc
usw
Jetzt mein Problem,
Wie muss so eine Batch Datei aussehen die aus dem
ABC123456.doc ABC123457.doc ABC123458.doc usw
das ABC entfernt, und auch in den Dateien muss das ABC1234.......doc geändert werden in nur
123456.doc
123457.doc
123458.doc
usw.
Geht das überhaupt mit einer Batch Datei.
Muss da der Dateinamen in eine Variable geschrieben werden und dann verändert werden dann mit suchen und ersetzen.....
Gruß
Helmut
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 298310
Url: https://administrator.de/forum/dateiname-aendern-und-auch-in-datei-aendern-evt-mit-einem-batch-298310.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
18 Kommentare
Neuester Kommentar
Hallo,
das Umbenennen ist kein Problem, aber für das Ersetzen innerhalb der Dateien ist schon mehr erforderlich. Das müsstest du für jedes Dateiformat skripten. Bei Office-Dokumenten ist das kein Problem da diese über die COM-Schnittstelle per Skript ansteuerbar sind.
Batch ist dafür aber völlig ungeeignet, mindestens VBS solltest du dafür verwenden.
Mit Powershell würde sowas dann für Word Dokumente und die Umbenennung nach deiner Beschreibung etwa so aussehen:
Wie gesagt, für Office-Dokumente wie Word, Excel, Powerpoint lässt sich die Ersetzung im Dokument skripten, wie das für deine anderen Dateien aussieht können wir hier nicht wissen da wir sie nicht kennen. Hier sind dann immer Anpassungen an die jeweilige Anwendung obligatorisch.
fk
das Umbenennen ist kein Problem, aber für das Ersetzen innerhalb der Dateien ist schon mehr erforderlich. Das müsstest du für jedes Dateiformat skripten. Bei Office-Dokumenten ist das kein Problem da diese über die COM-Schnittstelle per Skript ansteuerbar sind.
Batch ist dafür aber völlig ungeeignet, mindestens VBS solltest du dafür verwenden.
Mit Powershell würde sowas dann für Word Dokumente und die Umbenennung nach deiner Beschreibung etwa so aussehen:
# Word COM-Object erzeugen
$objWord = New-Object -Com Word.Application
# Zum Testen Word anzeigen
$objWord.Visible = $true
# null parameter für nicht benötigte Parameter in Word-Funktionen
$n = [System.Reflection.Missing]::Value
# Für jede *.doc Datei in einem Ordner:
gci 'C:\OrdnerXYZ\*.doc' -File | %{
# Datei öffnen
$doc = $objWord.Documents.Open($_.Fullname)
# Nach Dateinamen suchen und entsprechend ersetzen
$doc.Content.Find.Execute('<[A-Za-z]@([0-9]@.doc)>', $true, $false, $true, $false, $false, $true, 1, $false, '\1', 2, $n, $n, $n, $n)
# Dokument speichern und schließen
$doc.Save()
$doc.Close()
# aktuelle Datei umbenennen
rename-item $_.FullName -NewName ($_.Name -replace '([A-Z]+)(\d+\.doc)$','$2')
}
# Word schließen
$objWord.Quit()
# Com-Objekt freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objWord)
fk
Das sind bei mir nicht nur Word Dokumente, sondern da sind auch nur .txt Dateien dabei.
Dateien, die nur Plaintext enthalten, lassen sich relativ einfach mit den puren Möglichkeiten von Scriptsprachen bearbeiten. Bei allen anderen Dateitypen muss man mit den Programmen arbeiten, die diese bearbeiten können, und diese müssen dann obendrein ein Interface zur Verfügung stellen, um per Script bedienbar zu sein.Um welche Dateitypen geht es denn nun im einzelnen?
Grüße
rubberman
Na wenns nur reine Textdateien sind, das geht ja out of the box ohne die zugeordnete Anwendung.
In allen Textdateien das die Bauchstaben der Dateinamen entfernen und nur die Zahlen + Dateiendung (doc) drin stehen lassen.
Leider wird deine Beschreibung durch die nun in diversen deiner Antworten wiedersprüchlichen Angaben nicht besser. Also versuche dich mal mit einem einzigen Posting in dem alles klipp und klar und unmissverständlich drin steht, denn so weis doch kaum einer mehr was deine exakten Anforderungen sind
Mal sind es doc mal wieder nur txt dann doch PDF ....??!
Hätte man seinen Ursprungspost gleich zu Beginn mit allen benötigten Infos gefüllt wäre das in ein zwei Postings alles geklärt gewesen, ohne einem alles aus der Nase ziehen zu müssen!!
In allen Textdateien das die Bauchstaben der Dateinamen entfernen und nur die Zahlen + Dateiendung (doc) drin stehen lassen.
gci 'c:\ordner\*.txt' | %{(gc $_.Fullname) -replace '[A-Z]+(\d+\.doc)','$1' | out-file $_.Fullname}
Leider wird deine Beschreibung durch die nun in diversen deiner Antworten wiedersprüchlichen Angaben nicht besser. Also versuche dich mal mit einem einzigen Posting in dem alles klipp und klar und unmissverständlich drin steht, denn so weis doch kaum einer mehr was deine exakten Anforderungen sind
Mal sind es doc mal wieder nur txt dann doch PDF ....??!
Hätte man seinen Ursprungspost gleich zu Beginn mit allen benötigten Infos gefüllt wäre das in ein zwei Postings alles geklärt gewesen, ohne einem alles aus der Nase ziehen zu müssen!!
#Ordner in dem die Dateien verarbeitet werden
$folder = 'c:\ordnerxyz'
# Word Objekt erzeugen
$objWord = New-Object -Com Word.Application
# null parameter für word-funktionsaufrufe
$n = [System.Reflection.Missing]::Value
# Durchsuche den o.a. Ordner rekursiv nach den Dateien
gci "$folder\*" -Include '*.log','*.txt','*.doc' -Recurse | %{
# wenn es ein Word-Dokument ist ...
if ($_.Extension -eq '.doc'){
# öffne es
$doc = $objWord.Documents.Open($_.Fullname)
# ersetze alle Dateinamen nach dem gewünschten Muster
$doc.Content.Find.Execute('<[A-Za-z]@([0-9]@.doc)>', $false, $false, $true, $false, $false, $true, 1, $false, '\1', 2, $n, $n, $n, $n)
# speichere das Dokument und schließe es
$doc.Save(); $doc.Close()
}Else{
# Wir verarbeiten eine Paintext-Datei
(gc $_.Fullname) -replace '[A-Z]+(\d+\.(doc|txt|log|pdf))','$1' | out-file $_.Fullname
}
}
# Word schließen
$objWord.Quit()
# COM-Objekt freigeben
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($objWord)
Diese Zeile
Die Klammern () setzen eine Backreference die wir im Ersetzungsstring mit \1 benutzen um nur diesen Teil des Musters zu erhalten, also alles bis auf die Buchstaben am Anfang.
Das ist das selbe wenn du im Dokument auf F5 drückst und dieses Muster in den Ersetzen Dialog eingibst.
Was die weiteren Parameter der Funktion bedeuten kannst du hier nachlesen:
https://msdn.microsoft.com/de-de/library/office/ff193977.aspx
Dann zu dieser Zeile:
Hoffe das hilft dir das zu verstehen.
Regular-Expressions kann ich dir hier nicht bis ins Detail erläutern, das würde zu weit gehen, denn das ist ein riesiges Thema mit dem du dich mal in Ruhe beschäftigen solltest.
Regular Expressions
Gruß fk
$doc.Content.Find.Execute('<[A-Za-z]@([0-9]@.doc)>', $false, $false, $true, $false, $false, $true, 1, $false, '\1', 2, $n, $n, $n, $n)
macht nichts anderes als mit einem Muster nach Strings zu suchen die deinen Dateinamen entsprechen, also mindestens ein Buchstabe von A-Z oder a-z gefolgt von mindestens einer Zahl von 0-9 und anschließendem .doc. Die < und > bedeuten Wortanfang und Wortende.Die Klammern () setzen eine Backreference die wir im Ersetzungsstring mit \1 benutzen um nur diesen Teil des Musters zu erhalten, also alles bis auf die Buchstaben am Anfang.
Das ist das selbe wenn du im Dokument auf F5 drückst und dieses Muster in den Ersetzen Dialog eingibst.
Was die weiteren Parameter der Funktion bedeuten kannst du hier nachlesen:
https://msdn.microsoft.com/de-de/library/office/ff193977.aspx
Dann zu dieser Zeile:
(gc $_.Fullname) -replace '[A-Z]+(\d+\.(doc|txt|log|pdf))','$1' | out-file $_.Fullname
Diese holt sich den gesamten Inhalt der Textdatei (gc $_.Fullname) dann wird mit dem Operator -replace und dem Regular-Expression-String das selbe gemacht wie oben im Word-Dokument. Nur ist hier die Syntax etwas anders da es sich hier um einen regulären Regular-Expression-String handelt. Word verwendet hier eine andere proprietäre Muster-Syntax. Hier wird die Backreference also das Klammernpaar als $1 angesprochen. Das ganze wird dann per Pipe an out-file gesendet welches es in die Datei zurückschreibt.Hoffe das hilft dir das zu verstehen.
Regular-Expressions kann ich dir hier nicht bis ins Detail erläutern, das würde zu weit gehen, denn das ist ein riesiges Thema mit dem du dich mal in Ruhe beschäftigen solltest.
Regular Expressions
Ist es auch möglich da ein Protokoll mit einzubinden,
Kann man machen, ist aber zusätzlicher Aufwand.Gruß fk