Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

German support forum

Moderators: white, Hacker, Stefan2

KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

Moin Moin,
ich würde gerne 4 Jobs od.Batchdateien / Buttoms anlegen die u.a. durchführt

A) (verschieben)
Im gleichen Tab von markierten Dateien Verzeichnisse mit einem Zusatz am Ende erstellen und die Dateien verschieben
datei1.jpg --> verzeichnis datei1.jpg_neu erstellen und die datei verschieben
datei2.jpg --> verzeichnis datei2.jpg_neu erstellen und die datei verschieben

B) (verschieben)
Das gleiche wie A jedoch im anderen Panel

C) (löschen)
datei1.jpg --> verzeichnis datei1.jpg_del erstellen und die datei löschen
datei2.jpg --> verzeichnis datei2.jpg_del erstellen und die datei löschen

D)
Das gleiche wie C jedoch im anderen Panel

Ich experimentiere schon einige Stunden mit den Codes aus dem Forum herum. Bekomme das aber nicht vernüftig hin.
Wäre super wenn mir jemand helfen könnte.

Danke
Tom
Last edited by KraWeb on 2023-02-14, 22:50 UTC, edited 1 time in total.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Ordner kopieren

Post by *Stefan2 »

Hallo und willkommen KraWeb.

Der TC liefert dir Parameter, wie zB %L" für eine temporäre Liste aller ausgewählten Dateien (Ordner sind ja auch nur Dateien).
Klicke mal mit der rechten Maustaste auf einen Button , und im "geöffneten Button" klicke auf [Hilfe] und schau dir dieses Parameter an.

Als nächstes benötigst du eine Programmiersprache deiner Wahl (VBS, PowerShell, JS , AutoHotkey, weniger DOS-Batch)
um über einen Loop die einzelne Elemente (Zeilen) aus der obigen temporären %L-Datei abzuarbeiten.

Wenn ich Zeit habe, poste ich dir mal ein Beispielskript, aber eher ist wohl ein Anderer schneller ..... :D
Jetzt habe ich noch etwas zu tun.


BTW: den Subject deines Threads werden wir noch anpassen müssen...






Beispiel-Button:
KOMMANDO: PowerShell -NoExit
PARAMETER: Get-Content '%L' | ForEach{ $_ }
STARTPFAD:
ICON: PowerShell


Mehr Infos über meine Sig,, zB
https://ghisler.ch/board/viewtopic.php?p=390617#p390617



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

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *Stefan2 »

Hier sind die gewünschten Skripte für die PARAMETER-Box im TC-Button:


A) von den markierten Dateien     neue Verzeichnisse mit einem Zusatz am Ende erstellen     und die Dateien dahinein verschieben
gc '%F'|ForEach{$P=($_+'_neu');md $P;move $_ $P}


B) Das gleiche wie A     jedoch im anderen Panel
gc '%F'|ForEach{$P=$( '%T' + \"$_\" + '_neu');md $P;move $_ $P}




Ausführliche Syntax:
Get-Content ' %F ' | ForEach-Object{ $Path = $( ' %T ' + \" $PSItem \" + ' _neu ' ) ; New-Item -path $Path -type directory ; Move-Item -path $PSItem
-destination $Path }




Beispiel-Button:
KOMMANDO: PowerShell -NoExit
PARAMETER: Get-Content '%L' | ForEach{ $_ }
STARTPFAD:
ICON: PowerShell
Tooltip: hier deine Beschreibung | neue Zeile

Alles kommt direkt in den Button, kein Aufruf einer externen Datei.



Erklärungen:
%F und %T sind Parameter vom TC, hier reichen einfache Anführungszeichen im Befehl um die Pfade zu quoten.

Der TC liefert dir Parameter, wie zB "%F" für eine temporäre Liste aller ausgewählten Dateien (Ordner sind ja auch nur Dateien).
Klicke mal mit der rechten Maustaste auf einen Button , und im "geöffneten Button" klicke auf [Hilfe] und schau dir dieses Parameter an.

Mehr gesammelte Info aus dem Forum unten über meine Signature.


Einfache Anführungszeichen würden auch bei PoSh reichen,
weil aber die Variable $_ expanded werden soll, muss sie in doppelten Anführungszeichen gesetzt werden.

Da die einzelnen Interpreter jeweils die äußeren Anführungszeichen entfernen,
müssen die doppelten Anführungszeichen im TC-Befehl
verdreifacht werden (""" => gib mir 1 doppeltes Anführungszeichen)
oder escaped (\" => gib mir 1 doppeltes Anführungszeichen)


EDIT: Wenn das Skript funktioniert, kannst du das -NoExit auch rausnehmen.
Dann siehst du aber auch keine Fehlermeldungen.
Dafür könnte man noch einen timeout als letzten Befehl in die Parameter-Box einfügen, vor dem schließenden "}"
Get-Content '%F' | ForEach{ $P=$( '%T' + \"$_\" + '_neu');md $P;move $_ $P ; timeout /t 60 }





Kannst du C und D anhand der Beispiele jetzt selbst erstellen?
Es muss ja nur "neu" zu "del" und "move" zu "del" geändert werden. (siehe zB https://ss64.com/ps/ )
Oder frag' nochmal nach...




 
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

Hey Stefan,
danke für Deine schnelle Antwort.
Hast Du toll erklärt, komme aber nicht ganz klar.
Ich habe andere Buttons, da rufe ich eine Batch Datei auf und übergebe Parameter. Das klappt.

Schreibe ich nun auch eine Batch mit dem Inhalt gc '%F'|ForEach{$P=($_+'_neu');md $P;move $_ $P } und rufe die auf?
Du hast ja in Deiner Beschreibung unter Kommando PowerShell -NoExit angegeben. Das ruft ja nur die Powershell auf.
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *Stefan2 »

Lies noch einmal von oben und beachte "Parameter" :D



ich hab's jetzt auch mal blau hervorgehoben...




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

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *Stefan2 »

OK, dann zeige ich es dir genauer:


Beispiel-Button:
KOMMANDO: PowerShell -NoExit
PARAMETER: gc '%F'|ForEach{$P=($_+'_neu');md $P;move $_ $P}
STARTPFAD:
ICON: PowerShell
Tooltip: hier deine Beschreibung | neue Zeile



Alles kommt direkt in den Button, kein Aufruf einer externen Datei.








 
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

Yes, funktioniert. Allerdings wird die Powershell in einem Fenster geöffnet (obwohl da -NoExit steht. Aber damit kann ich leben.
Vielen Dank Stefan
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *Stefan2 »

Genau für diesen Effekt ist diese -NoExit ja auch da ;-)

Wenn das Skript funktioniert, kannst du das -NoExit auch rausnehmen.

Dann siehst du aber auch keine Fehlermeldungen.
Dafür könnte man noch __ ; timeout /t 60 ___ als letzten Befehl in die Parameter-Box einfügen, vor dem schließenden "}"

Get-Content '%F' | ForEach{ $P=$( '%T' + \"$_\" + '_neu');md $P;move $_ $P ; timeout /t 60 }





 
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

ohhh. sorry. Es kommen nur Fehlermeldungen wenn das SUB schon vorhanden ist. Aber auch das ist kein Problem, da ich dieses Problem nur beim Testen habe und sonst wohl nie mehr. Ich lege mir nun mal alles 4 Buttons an und gebe Feedback/Erfolgsmeldung ;-)
Danke Stefan....
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *Stefan2 »

KraWeb wrote: 2023-02-14, 11:28 UTC ohhh. sorry. Es kommen nur Fehlermeldungen wenn das SUB schon vorhanden ist.

Dafür gibt es denn Parameter -ErrorAction SilentlyContinue

https://www.windowspro.de/script/fehlerbehandlung-powershell-erroraction-try-catch-finally


Das müsste ich mal genau testen, sollte aber etwa so funktionieren (hier in der Kurzversion -EA):
Get-Content '%F' | ForEach{ $P=$( '%T' + \"$_\" + '_neu');md $P -EA 0 ; move $_ $P -EA 0 ; timeout /t 60 }




Oder mittels Test-Path vorher überprüfen, ob der Ordner bereits existiert, und dann die Erstellung überspringen.





 
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

Hey Stefan, das funzt alles tadellos. Vielen Dank für Deine schnelle Unterstützung.
Gruss Tom
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

zu früh gefreut....habe das nun ausgiebiger getestet. Auf den NAS Laufwerken läuft das mal und mal nicht.
Kann nicht sagen warum das so ist. Bisher habe ich immer ein Scrip (war glaube ich auch von hier) benutzt. Das läuft super
zuverlässig; allerdings ohne Namenszusatz.
Kannst mir das so umbauen das die SUBs einen Namenszusatz bekommen.
Parameter:
"%F" "%T" ""
Batch Datei
@echo off
echo Bitte warten...
SETLOCAL ENABLEDELAYEDEXPANSION
For /f "usebackq tokens=* delims=" %%x in (%1) do (
set n=%%x
md "%%~nx"
move "%%x" "%%~nx" >NUL
)
Last edited by KraWeb on 2023-02-14, 22:52 UTC, edited 1 time in total.
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

Dein Script scheint nicht mit den Netzlaufwerken zurecht zu kommen. Ich rufe das auf einem Netzlaufwerk auf (z.B F:\test) und die SUBs
werden auf c:\ angelegt. Dateien werden allerdings nicht verschoben
User avatar
Stefan2
Power Member
Power Member
Posts: 4132
Joined: 2007-09-13, 22:20 UTC
Location: Europa

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *Stefan2 »

Hi Tom, dem Skript ist es egal ob Netzlaufwerk oder lokales C:-Laufwerk.
Es verwendet TC-Parameter (%L %T), um deine Auswahl und den Pfad des Targetpanels zu erhalten.


GC ' %F ' | ForEach{ $Path = $( \" $PSItem \" + ' _neu ' ) ; New -path $Path -type dire ; Move -path $PSItem -destination $Path }
nimmt einfach eine Zeile aus der temporäreren Datei vom TC ( '%F' mit den ausgewählten Dateien) und bearbeitet das.
- nimmt den Dateinamen und hängt einen Text an
- erstellt einen Ordner mit diesen so erhaltenen Namen
- verschiebt die Datei in diesen Ordner


Poste doch einmal ein paar reale Pfade\Dateinamen wo es nicht funktioniert, und den dazugehörigen Button von dir (rechte Maustaste >> Kopieren).
Dann können wir mal draufschauen ;-)




Bei "deiner" Batch sollte diese Änderung helfen:
md "%%~nx _neu"
move "%%x" "%%~nx _neu" >NUL


 
KraWeb
Junior Member
Junior Member
Posts: 39
Joined: 2023-02-13, 18:45 UTC

Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)

Post by *KraWeb »

Moin Stefan,
ich habe nun alle Button gelöscht und nochmals gemacht. Scheint somit zu funktionieren. Da ich 3 verschiedene Buttons generiert habe (wegen 3 verschiedenen Endungen) kann ich mir nur vorstellen das ich aus Versehen ein Script von Dir genommen habe das die Datei in das andere Panel verschiebt und ich in diesem auf C:\ gestanden habe. Das könnte das erklären.

Die Batch funktioniert auch mit den von Dir vorgeschlagenen Änderungen.

Ich teste das nochmals heute Abend auf meinem Testsub auf dem NAS mit paar hundert Dateien ;-)

Vielen Dank für Deine Geduld & Mühe
Tom
Last edited by KraWeb on 2023-02-16, 16:39 UTC, edited 1 time in total.
Post Reply