Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
Moderators: Hacker, Stefan2, white
Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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
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.
Re: Ordner kopieren
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 .....
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
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 .....

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
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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...
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...
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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.
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.
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
Lies noch einmal von oben und beachte "Parameter" 
ich hab's jetzt auch mal blau hervorgehoben...

ich hab's jetzt auch mal blau hervorgehoben...
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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.
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.
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
Yes, funktioniert. Allerdings wird die Powershell in einem Fenster geöffnet (obwohl da -NoExit steht. Aber damit kann ich leben.
Vielen Dank Stefan
Vielen Dank Stefan
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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 }

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 }
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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....

Danke Stefan....
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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.
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
Hey Stefan, das funzt alles tadellos. Vielen Dank für Deine schnelle Unterstützung.
Gruss Tom
Gruss Tom
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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
)
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.
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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
werden auf c:\ angelegt. Dateien werden allerdings nicht verschoben
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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
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
Re: Ordner kopieren (Ordner von Dateinamen erstellen und Datei verschieben)
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
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.