MUT: Files kopieren statt umbenennen. Geht das?

German support forum

Moderators: Hacker, Stefan2, white

Post Reply
JuergenD
Junior Member
Junior Member
Posts: 6
Joined: 2015-03-16, 13:57 UTC

MUT: Files kopieren statt umbenennen. Geht das?

Post by *JuergenD »

Hi,
gibt es eine Möglichkeit das MUT zum Kopieren von Files zu verwenden?
Ich verwende das MUT z.B. zum Verschieben von bestimmten Files in ihren Parent-Folder.
Nun muss ich aber die Files nicht immer verschieben, sondern manchmal auch kopieren. Kann man das mit TC bewerkstelligen?
Konkretes Beispiel:
Ich habe einen Ordner [Daten] in dem befinden sich 100 Unterordner (00-99). In jedem Unterordner gibt es einen weiteren Unterordner [Archiv]. In dem befinden sich für jeden Tag ein File (20150101.dat - 20150316.dat). Ich möchte nun das "heutige" File von [Archiv] nach [..\Archiv] kopieren.

Verschieben ist mit MUT einfach. Ctrl-B im Ordner [Daten]. Files mit heutigen Datum markieren. Ctrl-M. Suchen nach: ^(.+) und ersetzen durch: ..\\$1 Fertig.
Aber kopieren geht so nicht... :-(

Vielen Dank für jeden Hinweis.
LG/Juergen
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

Hallo Juergen, willkommen im Forum.

Ich glaube ich hab's noch nicht ganz kapiert...
"""
Ich habe einen Ordner [Daten] in dem befinden sich 100 Unterordner (00-99).
In jedem Unterordner gibt es einen weiteren Unterordner [Archiv].
In dem befinden sich für jeden Tag ein File (20150101.dat - 20150316.dat).
"""

Also:

Daten
Daten\00
Daten\00\Archiv
Daten\00\Archiv\20150101.dat
...
Daten\99
Daten\99\Archiv
Daten\99\Archiv\20150101.dat
Daten\99\Archiv\...
Daten\99\Archiv\20150316.dat

"""Ich möchte nun das "heutige" File von [Archiv] nach [..\Archiv] kopieren."""

Also quasi als:
Daten\99\Archiv\20150316 - Copy.dat

?
Und das für jeden der "100 Unterordner" gleichzeitig, oder wie?

 
JuergenD
Junior Member
Junior Member
Posts: 6
Joined: 2015-03-16, 13:57 UTC

Post by *JuergenD »

Hallo Stefan!

Im Ordner Daten\00\Archiv befinden sich die Files (Filename ist Datum)
20150101.dat
20150102.dat
.
.
20150316.dat

Im Ordner Daten\01\Archiv ebenso usw. usw. bis Ordner Daten\99\Archiv
Pro Archiv Ordner ca. 75 Files. Also in Summe ca. 7500 Files.
Ich möchte nun alle 20150316.dat Files aus den Archiv Ordnern ein Verzeichnis höher kopieren.
Daten\00\Archiv\20150316.dat -> Daten\00
Daten\01\Archiv\20150316.dat -> Daten\01
.
.
Daten\99\Archiv\20150316.dat -> Daten\99

Wie gesagt, verschieben ist einfach mit dem Multi Rename Tool. Kopieren ist mein Problem.

LG/Juergen
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Kopieren mit dem MUT geht nicht (hieße ja dann auch MKT).

Aber man kann mit dem MUT eine Batch erzeugen die man anschließend das Kopieren ausführen lassen kann:

- Die gewünschten Dateien suchen und markieren
- MUT aufrufen
Dateiname wrote:#[=tc.path]#[N].[E]
- Erweiterung leer lassen
Suchen nach wrote:#(.*)#(.*)
Ersetzen mit wrote:copy "$1$2" "$1..\\$2"
- [x] Regex
- "Namen bearbeiten..." aufrufen (der Button rechts unter dem Fragezeichenbutton)
- Im Editor als "CopyUp.cmd" abspeichern.
- Editor und MUT abbrechen
- "CopyUp.cmd" ausführen lassen

Falls ein # im Pfad existiert, irgendeine andere Ziffernfolge benutzen die garantiert nicht vorkommt.

Um das etwas zu vereinfachen kann man die Umbenennungsvorschrift als "CopyUp" im MUT mit <F2> speichern und laden.

Wie immer: erst mal mit einem kleineren Testdatensatz ausprobieren!

Gruß
Holger
Edit: Punkt zwischen Name und Erweiterung
Last edited by HolgerK on 2015-03-17, 12:54 UTC, edited 1 time in total.
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

PowerShell: Kopiere Dateien eine Ebene höher

Post by *Stefan2 »

JuergenD wrote:Ich möchte nun alle 20150316.dat Files aus den Archiv Ordnern ein Verzeichnis höher kopieren.
Daten\00\Archiv\20150316.dat -> Daten\00\20150316.dat
Daten\01\Archiv\20150316.dat -> Daten\01\20150316.dat

Hier mal ein Beispiel mit einem PowerShell-Skript

Gewünschte Ordnerstruktur:

Code: Select all

C:\TEMP\PS\Daten>tree /F
C:.
├───01
│   │   20150317.dat (kopie)
│   │
│   └───Archiv
│           20150101.dat
│           20150202.dat
│           20150303.dat
│           20150317.dat
│
├───02
│   │   20150317.dat (kopie)
│   │
│   └───Archiv
│           20150101.dat
│           20150202.dat
│           20150303.dat
│           20150317.dat
│
├───03
│   │   20150317.dat
│   │
│   └───Archiv
│           20150101.dat
Step 1) Erstelle die Testdaten:

Code: Select all

Start PowerShell
CD Temp
MD Daten
CD Daten
 1..9| ForEach{ New-Item -name ("0$_") -ItemType directory }
 dir | ForEach{ New-Item -path  $_ -name Archiv -itemType directory }
 dir | ForEach{ New-Item -path "$_\Archiv" -name ((Get-Date -format "yyyyMMdd") + ".dat") -itemType file}
 dir | ForEach{ New-Item -path "$_\Archiv" -name "20150101.dat" -itemType file} |Out-Null
 dir | ForEach{ New-Item -path "$_\Archiv" -name "20150202.dat" -itemType file} |Out-Null
 dir | ForEach{ New-Item -path "$_\Archiv" -name "20150303.dat" -itemType file} |Out-Null

Jetzt zum gefordertem Ereignis:

Step 2) Kopiere alle "*.dat"-Dateien mit heutigem Datum eine Ebene höher:

Code: Select all

Start PowerShell
CD Daten
 dir | ForEach{ Copy  ("$_\Archiv" + (Get-Date -format "yyyyMMdd")+".dat")    -Destination "$_" }
EDIT:

besser

Code: Select all

 $File=(Get-Date -format "yyyyMMdd")+".dat"; dir | ForEach{Copy "$_\Archiv\$File" -Destination "$_"}
oder gar umbenannt:

Code: Select all

$File=(Get-Date -format "yyyyMMdd")+".dat"; dir | ForEach{Copy "$_\Archiv\$File" -Destination "$_\$File-Kopie.dat"}

.

 
Last edited by Stefan2 on 2015-03-17, 08:08 UTC, edited 1 time in total.
JuergenD
Junior Member
Junior Member
Posts: 6
Joined: 2015-03-16, 13:57 UTC

Post by *JuergenD »

Hallo Holger,
vielen Dank für die Antwort.
Das mit dem [=tc.path] ist ja ein cooler Trick. :D
Ein kleiner Fehler ist noch in der Beschreibung. Entweder gehört zwischen [N] und [E] noch ein Punkt (#[=tc.path]#[N].[E]) oder das [E] in das Feld Extension geschrieben.
Einziges Problem ist nur, dass [=tc.path] bei mir den Pfad c:\Test als c.\Test anzeigt. Ist das ein Bug?
Nochmals herzlichen Dank für Deine Bemühungen.
LG/Juergen
JuergenD
Junior Member
Junior Member
Posts: 6
Joined: 2015-03-16, 13:57 UTC

Post by *JuergenD »

@Stefan2
Vielen Dank für Deine Bemühungen.
Deine Powershell Lösung ist sehr elegant und ich werde sie mir mal "speichern". Ich wollte das Problem aber wie gewohnt mit meinem Lieblings-Universal-Werkzeug (also TC) lösen.

LG/Juergen
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Post by *Stefan2 »

JuergenD wrote: Ich wollte das Problem aber wie gewohnt mit meinem Lieblings-Universal-Werkzeug (also TC) lösen.
Kein Problem.

Aber ich starte dieses Skript auch z.B. einfach von einem TC-Button.
Somit kann man den TC quasi automatisieren, indem man für "solche" Arbeiten die Tools vom Betriebssystem nutzt.


[face=comicsansms]Jedem das Seine.[/face]


 
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

JuergenD wrote:Ein kleiner Fehler ist noch in der Beschreibung. Entweder gehört zwischen [N] und [E] noch ein Punkt (#[=tc.path]#[N].[E]) oder das [E] in das Feld Extension geschrieben.
Danke für den Hinweis. Korrigiert.
Einziges Problem ist nur, dass [=tc.path] bei mir den Pfad c:\Test als c.\Test anzeigt. Ist das ein Bug?
Nun ja, das ist eine konfigurierbare Fehlervermeidungsstrategie. :wink:
F1 4.b. Wincmd.ini wrote:MrtReplacePluginChars=1 0: Schaltet die automatische Ersetzung von ungültigen Zeichen von Inhaltsplugins im Mehrfach-Umbenenntool ab (z.B. ':' -> '.') -> der Benutzer muss sich selber darum kümmern
Default werden alle Zeichen aus Inhaltsplugin so modifiziert, dass eine Umbenennung mit möglichst wenig Konflikten möglich ist.
Kann man auf 0 setzen, dann klappt es auch mit dem Doppelpunkt.

Alternativ kann man die Umbenennungsvorschrift anpassen:
Dateiname wrote:#1[=tc.path:1]#2[=tc.path:3-]#3[N].[E]
Suchen nach wrote:#1(.*)#2(.*)#3(.*)
Ersetzen mit wrote:copy "$1:$2$3" "$1:$2..\\$3"

Gruss
Holger
User avatar
HolgerK
Power Member
Power Member
Posts: 5411
Joined: 2006-01-26, 22:15 UTC
Location: Europe, Aachen

Post by *HolgerK »

Stefan2 wrote:[face=comicsansms]Jedem das Seine.[/face] 
Persönlich würde ich wahrscheinlich auch eher einen Script benutzen. Vielleicht mit %L als Übergabeparameter um die Selektionsmechanismen des TC nutzen zu können.
Aber manchmal ist es auch spannend auszuprobieren was mit dem TC so alles möglich ist :wink:

Gruss
Holger
User avatar
Stefan2
Power Member
Power Member
Posts: 4281
Joined: 2007-09-13, 22:20 UTC
Location: Europa

MUT: Kopiere Dateien

Post by *Stefan2 »

[face=comicsansms]*zustimm*[/face]

Mal TC-interna, mal Skript, wie's gerade Spaß macht.
Einfach mal alles Mögliche anbieten (und die Antworten sind ja nicht nur für den aktuellen OP bestimmt :wink:)




- - -


EDIT:
HolgerK wrote:Aber man kann mit dem MUT eine Batch erzeugen
die man anschließend das Kopieren ausführen lassen kann:

Das Selbe, nur ein etwas anderer Ansatz mit relativen Pfaden:



Ich befinde mich bereits im betreffenden Ordner, und....


Im Ordner (der zu kopierenden Dateien!) schon mal eine "__COPY.cmd" Datei anlegen und öffnen.


- MUT aufrufen
---- Dateiname:[N] Erweiterung:[E]

---- Suchen nach: (.+)
---- Ersetzen mit: COPY "$1" "..\"
---- [x] Regex

---- (In den New Name Spalte wird das Ergebnis angezeigt
COPY "Datei1.ext" ".."
COPY "Datei2 Beispiel.ext" ".."
COPY "Datei 3 Example.ext" ".."
)


---- "Namen bearbeiten..." aufrufen (der Button rechts unter dem Fragezeichenbutton)
---- Den Inhalt des Editors (das oben erwähnte Ergebnis) in die zuvor erstellt __COPY.cmd abspeichern.

- Editor und MUT ABBRECHEN

- Die "__COPY.cmd" ausführen

- Fertig.






- - - Möglichkeit 2

Natürlich kann man auch gleich einfach die Namen in die Zwischenablage kopieren
und die Batchzeilen mit einem Editor wie Notepad2, PSPad oder Notepad++ erzeugen.
Einfach an den Anfang aller Zeilen COPY  " , und ans Ende " ".." anfügen:

COPY "Datei1.ext" ".."





- - - Möglichkeit 3

Oder das makebat-Packerplugin verwenden, wie Christian unten anmerkt:
- Dateien markieren
- Mit Alt+F5 den Pack-Dialog öffnen
- Packer "bat" auswählen (wenn Plugin installiert, und mit dieser Erweiterung konfiguriert ist)
- [OK] klicken
- im Dialog eingeben: COPY "%P%M" "%P.."
- [OK] klicken
- im anderen Panel die jetzt gerade erstellt *.bat suchen und ausführen





- - - 
Last edited by Stefan2 on 2015-08-31, 13:18 UTC, edited 1 time in total.
JuergenD
Junior Member
Junior Member
Posts: 6
Joined: 2015-03-16, 13:57 UTC

Post by *JuergenD »

@Holger
Vielen Dank für Deine zwei Lösungen. Ich werde die erste verwenden (MrtReplacePluginChars), da die Pfade auch oft eine Netzwerkressource adressieren (also \\servername\folder\subfolder). Die erste Lösung funktioniert dann mit allen Varianten.
Ein Skript, wie das von Stefan, ist natürlich eine gute Lösung, wenn die Ausgangslage immer gleich ist. In meinem Fall ist es aber meistens so, dass die Selektion, welche Files kopiert werden soll, nicht so eindeutig ist und dann einiges an Handarbeit notwendig ist. Da ist es einfacher mit TC direkt zu arbeiten.
Jedenfalls danke für die schnelle und professionelle Hilfe :wink:
LG/Juergen
User avatar
ghisler(Author)
Site Admin
Site Admin
Posts: 50567
Joined: 2003-02-04, 09:46 UTC
Location: Switzerland
Contact:

Post by *ghisler(Author) »

Man kann auch das makebat-Packerplugin verwenden, um solche Batchdateien zu erzeugen. So kann man für jede Datei auch leicht mehrere Befehlszeilen anlegen.
Author of Total Commander
https://www.ghisler.com
JuergenD
Junior Member
Junior Member
Posts: 6
Joined: 2015-03-16, 13:57 UTC

Post by *JuergenD »

@Ghisler
Danke für den Hinweis. Ich habe mir das makebat-plugin schon einmal vorgemerkt.
Post Reply