Komplette Ordner kopieren über Kontextmenü
Hallo,
Ich habe in meinem Kontextmenü ein paar Einträge um die Datei, die angeklickt wird von A nach B zu kopieren. Dazu hatte ich 2 Fragen:
1. Gibt es bei diesem Kopieren eine Möglichkeit cmd.exe unsichtbar auszuführen? Man kann das ja bei Programmen wie Bat-to-Exe-Converter auswählen wenn man eine bestimmte Batch datei hat. Ist dies auch irgendwie über Tricks möglich auch cmd.exe unsichtbar zu erstellen?
2. Wenn ich beim kopieren über das Kontextmenü einen Ordner auswähle werden natürlich nur die Dateien die sich darin befinden an die andere Stelle kopiert. Ist es irgendwie möglich, dass ein Ordner an der Zielstelle erstellt wird und die Dateien dort hinein kopiert werden. Also das wirklich der ganze Ordner und nicht nur die Datein kopiert werden.
Bis jetzt benutze ich über die Registry den Befehl cmd.exe copy "%0" "C:\Users\XY\Desktop\" /Y... Allerdings bekommt man natürlich bei "%0" nur den kompletten Pfad ausgegeben. Kann man daraus dann den Ordnernamen extrahieren oder so??
MfG Nick
Ich habe in meinem Kontextmenü ein paar Einträge um die Datei, die angeklickt wird von A nach B zu kopieren. Dazu hatte ich 2 Fragen:
1. Gibt es bei diesem Kopieren eine Möglichkeit cmd.exe unsichtbar auszuführen? Man kann das ja bei Programmen wie Bat-to-Exe-Converter auswählen wenn man eine bestimmte Batch datei hat. Ist dies auch irgendwie über Tricks möglich auch cmd.exe unsichtbar zu erstellen?
2. Wenn ich beim kopieren über das Kontextmenü einen Ordner auswähle werden natürlich nur die Dateien die sich darin befinden an die andere Stelle kopiert. Ist es irgendwie möglich, dass ein Ordner an der Zielstelle erstellt wird und die Dateien dort hinein kopiert werden. Also das wirklich der ganze Ordner und nicht nur die Datein kopiert werden.
Bis jetzt benutze ich über die Registry den Befehl cmd.exe copy "%0" "C:\Users\XY\Desktop\" /Y... Allerdings bekommt man natürlich bei "%0" nur den kompletten Pfad ausgegeben. Kann man daraus dann den Ordnernamen extrahieren oder so??
MfG Nick
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 357581
Url: https://administrator.de/contentid/357581
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
10 Kommentare
Neuester Kommentar
Hallo Nick,
Wenn Du unter Windows Dateien kopierst, werden Dateien kopiert
und wenn Du Ordner kopierst werden Ordner kopiert.
https://ss64.com/nt/syntax-args.html
Gruß Frank
Zitat von @Nick.B:
Wenn ich beim kopieren über das Kontextmenü einen Ordner auswähle werden natürlich nur die Dateien die sich darin befinden an die andere Stelle kopiert. Ist es irgendwie möglich, dass ein Ordner an der Zielstelle erstellt wird und die Dateien dort hinein kopiert werden. Also das wirklich der ganze Ordner und nicht nur die Datein kopiert werden.
Welches merkwürdie Betriebssystem nutzt Du?Wenn ich beim kopieren über das Kontextmenü einen Ordner auswähle werden natürlich nur die Dateien die sich darin befinden an die andere Stelle kopiert. Ist es irgendwie möglich, dass ein Ordner an der Zielstelle erstellt wird und die Dateien dort hinein kopiert werden. Also das wirklich der ganze Ordner und nicht nur die Datein kopiert werden.
Wenn Du unter Windows Dateien kopierst, werden Dateien kopiert
und wenn Du Ordner kopierst werden Ordner kopiert.
Zitat von @Nick.B:
Allerdings bekommt man natürlich bei "%0" nur den kompletten Pfad ausgegeben. Kann man daraus dann den Ordnernamen extrahieren oder so?
Den Ordernamen oder so kann man so extrahieren:Allerdings bekommt man natürlich bei "%0" nur den kompletten Pfad ausgegeben. Kann man daraus dann den Ordnernamen extrahieren oder so?
https://ss64.com/nt/syntax-args.html
Gruß Frank
Hallo Nick,
siehe oben.
Es gibt Wege die cmd.exe versteckt auszuführen, aber das Hilfsmittel, das das macht, ist dann zumindest beim Aufruf der
Ein "Aufblitzen" eines "Dos"-Fensters wirst Du nicht vermeiden können, aber der angestoßende Kopiervorgang könnte im "Versteckten" zuende geführt werden.
Er ließe sich dann aber weder kontrollieren noch abbrechen, noch wüsstest Du wann er tatsächlich fertig ist.
Alternativ könnest Du Dein
Das halte ich für den besseren Weg, das ist aber nur ein Vorschlag.
Gruß Frank
Zitat von @Nick.B:
cmd.exe /s /c copy "%0" "C:\Users\XY\OrdnerXY" /Y ; dafür, dass die angewählte Datei ... verschoben wird
cmd.exe /s /c copy "%0" "C:\Users\XY\OrdnerXY" /Y ; dafür, dass die angewählte Datei ... verschoben wird
copy
kopiert, es wird also Nichts verschoben.siehe oben.
Es gibt Wege die cmd.exe versteckt auszuführen, aber das Hilfsmittel, das das macht, ist dann zumindest beim Aufruf der
cmd.exe
nicht versteckt.Ein "Aufblitzen" eines "Dos"-Fensters wirst Du nicht vermeiden können, aber der angestoßende Kopiervorgang könnte im "Versteckten" zuende geführt werden.
Er ließe sich dann aber weder kontrollieren noch abbrechen, noch wüsstest Du wann er tatsächlich fertig ist.
Alternativ könnest Du Dein
cmd
-Aufruf mit start /min
ergänzen, dann würde der Kopiervorgang minimiert in der Taskleist ablaufen.Das halte ich für den besseren Weg, das ist aber nur ein Vorschlag.
Gruß Frank
Hallo Nick,
Probier mal diese Varianten aus:
und testweise mal diese ohne Anführungszeichen
wobei die Letzeren nur bei Verzeichnissen ohne im Namen enthaltene Leerzeichen funktionieren würden.
Wie verhält es sich denn, wenn Du
versus
Wenn das nicht hilft, könntest Du die Aufgabe in eine Batchdatei verlagern und diese aus dem Kontexmenü heraus aufrufen.
So solltest Du mit
Bei der Lösung müsstest Du allerdings nicht nur den Reg-Eintrag haben, sondern eben auch die Datei
Eine ganz einfache Lösung wäre auch, Du erstellst Dir in diesem Ordner
eine Verknüpfung zum Ordner
und nennst sie beispielsweise "OrdnerXY".
Dann kannst Du ganz einfach über das
alles Mögliche dorthinkopieren.
Das funktioniert dann auch, wenn Du mehrere Dateien und/oder Ordner markiert hast.
Alles Markierte wird dann kopiert.
Es wird auch kopiert und nicht verschoben wenn Quelle und Ziel auf demselben Laufwerk liegen.
Gruß Frank
Zitat von @Nick.B:
Statt dem Ordnernamen wird dann einfach %~p1 ausgeschrieben.
Was mache da ich falsch??
An so einer Stelle habe ich das noch nicht genutzt.Statt dem Ordnernamen wird dann einfach %~p1 ausgeschrieben.
Was mache da ich falsch??
Probier mal diese Varianten aus:
"%%~p1"'%~p1''%%~p1'
und testweise mal diese ohne Anführungszeichen
%~p1%%~p1
wobei die Letzeren nur bei Verzeichnissen ohne im Namen enthaltene Leerzeichen funktionieren würden.
Wie verhält es sich denn, wenn Du
/s
weglässt?cmd.exe /s /k echo "%0"
cmd.exe /s /k echo "%~p1"
versus
cmd.exe /k echo "%0"
cmd.exe /k echo "%~p1"
Wenn das nicht hilft, könntest Du die Aufgabe in eine Batchdatei verlagern und diese aus dem Kontexmenü heraus aufrufen.
cmd.exe /c start "Kopieren" /d "C:\Program Files (x86)\Tools" /min MeineKopier.cmd "%0"
So solltest Du mit
%0
machen können, was Du willst.Bei der Lösung müsstest Du allerdings nicht nur den Reg-Eintrag haben, sondern eben auch die Datei
MeineKopier.cmd
.Eine ganz einfache Lösung wäre auch, Du erstellst Dir in diesem Ordner
C:\Users\XY\AppData\Roaming\Microsoft\Windows\SendTo\
eine Verknüpfung zum Ordner
C:\Users\XY\Desktop\
und nennst sie beispielsweise "OrdnerXY".
Dann kannst Du ganz einfach über das
Kontextmenü -> Senden an -> OrdnerXY
alles Mögliche dorthinkopieren.
Das funktioniert dann auch, wenn Du mehrere Dateien und/oder Ordner markiert hast.
Alles Markierte wird dann kopiert.
Es wird auch kopiert und nicht verschoben wenn Quelle und Ziel auf demselben Laufwerk liegen.
Gruß Frank
Hallo Nick,
Nein, ich habe Eine.
Du hast statt des 0. Parameters den 1. Parameter genutzt.
Den gibt es aber in diesem Fall nicht.
Das war mir leider zunächst nicht aufgefallen und ich habe es sogar in meinem Kommentar übernommen.
Wenn Du
Das bringt Dich zurück zum Start und zur Wiederholung Deiner bisherigen Tests.
"Senden an" gefällt Dir nicht?
Gruß Frank
Nein, ich habe Eine.
Du hast statt des 0. Parameters den 1. Parameter genutzt.
Den gibt es aber in diesem Fall nicht.
Das war mir leider zunächst nicht aufgefallen und ich habe es sogar in meinem Kommentar übernommen.
%~p1
bezieht sich auf %1
.Wenn Du
%0
verwenden möchtest, dann musst Du auch %~p0
schreiben.Das bringt Dich zurück zum Start und zur Wiederholung Deiner bisherigen Tests.
"Senden an" gefällt Dir nicht?
Gruß Frank
Als "copy_folder.vbs" in "%APPDATA%\Microsoft\Windows\SendTo"
Hast du dann im "Senden an" Kontextmenü. Das Script nutzt ROBOCOPY, führt es aber im unsichtbaren Fenster aus.
Steffen
Option Explicit
Dim oFSO
If WScript.Arguments.Count <> 1 Then WScript.Quit
Set oFSO = CreateObject("Scripting.FileSystemObject")
If Not (oFSO.FolderExists(WScript.Arguments(0))) Then WScript.Quit
CreateObject("WScript.Shell").Run "robocopy.exe """ & WScript.Arguments(0) & """ ""C:\Test\" & _
oFSO.GetFileName(WScript.Arguments(0)) & """ *.* /e /r:1 /w:1", 0, False
Steffen