Ich möchte alle Dateien im einem Verzeichnisbaum, welche einen bestimmten Namen haben, durch eine vorgegebene Datei ersetzen. Hat jemand eine Idee, wie man das bewerkstelligen kann?
Alle Dateien mit einem bestimmten Namen zu finden, ist einfach. Auch könnte man sie einfach löschen. Aber kann man sie auf einfache Weise durch eine vorgegebene Datei ersetzen (überschreiben)?
Dateien im Verzeichnisbaum mit bestimmtem Namen ersetzen
Moderators: Hacker, Stefan2, white
-
- Junior Member
- Posts: 24
- Joined: 2009-07-05, 08:05 UTC
Mit einem Skript?
Etwa:
- Datei suchen > Feed to Listbox
- die Liste der Dateien in der Listbox mittels TC Parameter %L in eine temporäre Datei schreiben lassen
- ein Skript starten, welches durch diese Dateiliste geht
und in jedem Pfad die Datei durch die neue Datei austauscht.
Pseudo-Code:
vTempDatei = "X:\Test\NeueDatei.txt"
For Each File in TC-%L-List Do
- merke nur den Pfad zur Datei in VPATH
- Lösche alte Datei
- kopiere vTempDatei VPATH
Next
Etwa:
- Datei suchen > Feed to Listbox
- die Liste der Dateien in der Listbox mittels TC Parameter %L in eine temporäre Datei schreiben lassen
- ein Skript starten, welches durch diese Dateiliste geht
und in jedem Pfad die Datei durch die neue Datei austauscht.
Pseudo-Code:
vTempDatei = "X:\Test\NeueDatei.txt"
For Each File in TC-%L-List Do
- merke nur den Pfad zur Datei in VPATH
- Lösche alte Datei
- kopiere vTempDatei VPATH
Next
Da bietet sich Christians TC MakeBAT Plugin an.
http://www.ghisler.com/plugins.htm
http://www.ghisler.com/plugins.htm
MakeBAT Plugin?
Aber doch nicht aus der ListBox heraus?
Da bekomme ich nur eine Zeile in die Batch geschrieben.
Nur aus dem normalen ListView, oder BranchView heraus bekomme ich alle Dateien in die Liste.
Und dann gibt's bei Batch öfters Probleme mit Umlaute und Akzent Zeichen.
Von der "Search to List Box" aus würde ich es folgendermaßen machen:
(vorher ein Backup der wichtigen Dateien erstellen)
- TC button anlegen zum unten angegebenen Skript:
"%COMMANDER_PATH%\VBS\ForEachSelFileDo.vbs"
mit %L als Parameter
- Datei suchen
- Feed to list box
- alle markieren
- skript ausführen
- Hier das Beispiel Skript
.
Aber doch nicht aus der ListBox heraus?
Da bekomme ich nur eine Zeile in die Batch geschrieben.
Nur aus dem normalen ListView, oder BranchView heraus bekomme ich alle Dateien in die Liste.
Und dann gibt's bei Batch öfters Probleme mit Umlaute und Akzent Zeichen.
Von der "Search to List Box" aus würde ich es folgendermaßen machen:
(vorher ein Backup der wichtigen Dateien erstellen)
- TC button anlegen zum unten angegebenen Skript:
"%COMMANDER_PATH%\VBS\ForEachSelFileDo.vbs"
mit %L als Parameter
- Datei suchen
- Feed to list box
- alle markieren
- skript ausführen
- Hier das Beispiel Skript
Code: Select all
'On Error Resume Next
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WS = Wscript.CreateObject("WScript.Shell")
Const FORREADING = 1
Const vNewFilePath = "D:\rive\path\to"
Const vNewFileName = "new file.ext"
sTCtempList = Wscript.arguments.Item(0) ' The TC temp file due the "%L" parameter
If FSO.FileExists(sTCtempList) Then
'// DEBUG:
'MsgBox "Tempfile is: " & sTCtempList '>> C:\Users\myusername\AppData\Local\Temp\CMDB034.tmp
'WS.run "notepad " & sTCtempList
Set oTextStream = FSO.OpenTextFile(sTCtempList,FORREADING)
Do Until oTextStream.AtEndOfStream
'//Für jede Datei in der TC-Liste mache:
vFullName = oTextStream.ReadLine
Set oFile = FSO.GetFile(vFullName)
vName = FSO.GetFileName(oFile)
vBase = FSO.GetBaseName(oFile)
vExte = FSO.GetExtensionName(oFile)
vPath = oFile.ParentFolder
'//POSSIBLE ACTIONS:
'//Debug:
rtn = MsgBox("FullName: " & vFullName & vbCRLF & vbCRLF _
& "New File: " & vNewFilePath &"\"& vNewFileName , vbOkCancel,"Header line")
if(rtn = vbCancel) Then WScript.Quit
'//In diesem Fall:
'instead of Deleting immediately, first rename origin file to a tmp name for secure reason:
'FSO.MoveFile source, destination
FSO.MoveFile vFullName, vFullName & ".tmp." & vExte
'copy new file on place of old file, only if not already
'exists due to searching with wild cards:
If Not (FSO.FileExists(vPath & "\" & vNewFileName)) Then
'FSO.CopyFile source, destination[, overwrite]
FSO.CopyFile vNewFilePath &"\"& vNewFileName, vPath & "\"
'delete the origin, now tmp, file:
'FSO.DeleteFile filespec[, force]
FSO.DeleteFile vFullName & ".tmp." & vExte
Else
MsgBox vPath & "\" & vNewFileName & " already exists, so we did not copy it again."
End If
Loop
oTextStream.Close
Else
WScript.Echo "Input file " & sTCtempList & " not found."
End If
.
Warum so kompliziert?
- Zu ersetzende Dateien suchen <Alt+F7>
- Anwenden & Markieren
- Im anderen Panel die neue Datei markieren
- <F5> :: "Optionen>>" :: "[x] Kopiere in alle markierten Verzeichnisse/Verknüpfungen im Zielfenster"
- Falls die neue Datei einen anderen Namen hat als die alten Dateien im Zielfenster, diese anschließend löschen.
Gruss
Holger
PS: Das klappt natürlich nicht wenn die zu ersetzenden Dateien Verknüpfungen sind
- Zu ersetzende Dateien suchen <Alt+F7>
- Anwenden & Markieren
- Im anderen Panel die neue Datei markieren
- <F5> :: "Optionen>>" :: "[x] Kopiere in alle markierten Verzeichnisse/Verknüpfungen im Zielfenster"
- Falls die neue Datei einen anderen Namen hat als die alten Dateien im Zielfenster, diese anschließend löschen.
Gruss
Holger
PS: Das klappt natürlich nicht wenn die zu ersetzenden Dateien Verknüpfungen sind

Ich bekomme da alle Einträge aus der Listbox, jeden in einer eigenen Zeile.Stefan2 wrote:MakeBAT Plugin?
Aber doch nicht aus der ListBox heraus?
Da bekomme ich nur eine Zeile in die Batch geschrieben.
Nur aus dem normalen ListView, oder BranchView heraus bekomme ich alle Dateien in die Liste.
Und dann gibt's bei Batch öfters Probleme mit Umlaute und Akzent Zeichen.
...
.
Keine Probleme so einen Job zu generieren.
-
- Junior Member
- Posts: 24
- Joined: 2009-07-05, 08:05 UTC
Habe nicht erwartet, in so kurzer Zeit gleich vier Lösungsmöglichkeiten aufgezeigt zu bekommen
.
Die Option "Kopiere in alle markierten Ordner/Verknüpfungen im Zielordner" ist natürlich genial (typisch TC!). Bisher ist mir diese Option gar nicht aufgefallen.
Vielen Dank euch allen für die tolle Unterstützung.

Die Option "Kopiere in alle markierten Ordner/Verknüpfungen im Zielordner" ist natürlich genial (typisch TC!). Bisher ist mir diese Option gar nicht aufgefallen.
Vielen Dank euch allen für die tolle Unterstützung.