├── CopyFolderTool ├── Icon.ico ├── Icon-CopyFolderTool.ico ├── Properties │ ├── Settings.settings │ ├── Settings.Designer.cs │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── packages.config ├── App.xaml ├── App.xaml.cs ├── UserSettings.settings ├── App.config ├── UserSettings.Designer.cs ├── MainWindow.xaml ├── CopyFolderTool.csproj └── MainWindow.xaml.cs ├── icons └── Icon-CopyFolderTool.ico ├── screenshots ├── header-image.jpg └── instruction-image.jpg ├── _install ├── AddToRightclickMenu.reg ├── RemoveToRightclickMenu.reg ├── update.bat ├── uninstall.bat └── install.bat ├── LICENSE ├── CopyFolderTool.sln ├── README.md └── .gitignore /CopyFolderTool/Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/CopyFolderTool/Icon.ico -------------------------------------------------------------------------------- /icons/Icon-CopyFolderTool.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/icons/Icon-CopyFolderTool.ico -------------------------------------------------------------------------------- /screenshots/header-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/screenshots/header-image.jpg -------------------------------------------------------------------------------- /_install/AddToRightclickMenu.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/_install/AddToRightclickMenu.reg -------------------------------------------------------------------------------- /screenshots/instruction-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/screenshots/instruction-image.jpg -------------------------------------------------------------------------------- /_install/RemoveToRightclickMenu.reg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/_install/RemoveToRightclickMenu.reg -------------------------------------------------------------------------------- /CopyFolderTool/Icon-CopyFolderTool.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/biteworks/CopyFolderTool/HEAD/CopyFolderTool/Icon-CopyFolderTool.ico -------------------------------------------------------------------------------- /CopyFolderTool/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /CopyFolderTool/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /_install/update.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | SET InstallDirectory="C:\Tools\CopyFolderTool\" 3 | SET CopyToFolder="%~dp0Executables\" 4 | 5 | ECHO 1. Check for "C:\Tools\CopyFolderTool\" folder 6 | IF NOT EXIST %InstallDirectory%NUL MKDIR %InstallDirectory% 7 | ECHO. 8 | 9 | ECHO 2. Update files in directory 10 | COPY %CopyToFolder% %InstallDirectory% 11 | ECHO ...Done 12 | ECHO. 13 | 14 | PAUSE -------------------------------------------------------------------------------- /_install/uninstall.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | SET InstallDirectory="C:\Tools\CopyFolderTool\" 3 | 4 | ECHO 1. Remove "C:\Tools\CopyFolderTool\" folder 5 | RMDIR /Q /S %InstallDirectory% 6 | ECHO ...Done 7 | ECHO. 8 | 9 | ECHO 2. Registry entry will be removed (needs admin rights) 10 | REM set __COMPAT_LAYER=RunAsInvoker 11 | REGEDIT.EXE /S "%~dp0\RemoveToRightclickMenu.reg" 12 | ECHO ...Done 13 | ECHO. 14 | 15 | PAUSE -------------------------------------------------------------------------------- /CopyFolderTool/App.xaml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /_install/install.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | SET InstallDirectory="C:\Tools\CopyFolderTool\" 3 | SET CopyToFolder="%~dp0Executables\" 4 | 5 | ECHO 1. Check for "C:\Tools\CopyFolderTool\" folder 6 | IF NOT EXIST %InstallDirectory%NUL MKDIR %InstallDirectory% 7 | ECHO. 8 | 9 | ECHO 2. Copy files to directory 10 | COPY %CopyToFolder% %InstallDirectory% 11 | ECHO. 12 | 13 | ECHO 3. Registry entry will be set (needs admin rights) 14 | REM set __COMPAT_LAYER=RunAsInvoker 15 | REGEDIT.EXE /S "%~dp0\AddToRightclickMenu.reg" 16 | ECHO ...Done 17 | ECHO. 18 | 19 | PAUSE -------------------------------------------------------------------------------- /CopyFolderTool/App.xaml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Configuration; 4 | using System.Data; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | using System.Windows; 8 | 9 | namespace CopyFolderTool 10 | { 11 | /// 12 | /// Interaktionslogik für "App.xaml" 13 | /// 14 | public partial class App : Application 15 | { 16 | public static String[] mArgs; 17 | private void Application_Startup(object sender, StartupEventArgs e) 18 | { 19 | if (e.Args.Length > 0) 20 | { 21 | mArgs = e.Args; 22 | } 23 | 24 | MainWindow wnd = new MainWindow(); 25 | wnd.Show(); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /CopyFolderTool/UserSettings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | C:\logs\ 7 | 8 | 9 | Backup 10 | 11 | 12 | *.bak 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 biteworks 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /CopyFolderTool.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30804.86 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CopyFolderTool", "CopyFolderTool\CopyFolderTool.csproj", "{7D2F494B-181F-4975-A998-6B760B6C2B3E}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {7D2F494B-181F-4975-A998-6B760B6C2B3E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {7D2F494B-181F-4975-A998-6B760B6C2B3E}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {7D2F494B-181F-4975-A998-6B760B6C2B3E}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {7D2F494B-181F-4975-A998-6B760B6C2B3E}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {3ED29094-FBD6-4AC0-B188-CE34ACA8408F} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /CopyFolderTool/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | 12 | namespace CopyFolderTool.Properties 13 | { 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 17 | { 18 | 19 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 20 | 21 | public static Settings Default 22 | { 23 | get 24 | { 25 | return defaultInstance; 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /CopyFolderTool/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | C:\logs\ 15 | 16 | 17 | Backup 18 | 19 | 20 | *.bak 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CopyFolderTool - A simple Robocopy GUI 2 | 3 | ![Image of application on gradient](screenshots/header-image.jpg?raw=true "Image of application on gradient") 4 | 5 | ## About 6 | 7 | A simple folder context menu app to copy files to another folder. The tool is a GUI for Robocopy that simplifies the copying process. 8 | 9 | In this age of remote working, large amounts of data often need to be copied to network drives over VPN. This app helps to copy the data more robustly and reliably. 10 | 11 | ## Installation 12 | 13 | 1. Download latest release 14 | 2. Unzip the folder 15 | 3. Run "install.bat" as admin. All files will be copied to "C:/Tools/CopyFolderTools" 16 | 4. Right-click menu entry will be set automatically 17 | 18 | ## Uninstall 19 | 20 | 1. Run "uninstall.bat" as admin 21 | 2. Menu entry will be deleted and the tools folder also 22 | 23 | ## Usage 24 | 25 | ![Image of application for instruction](screenshots/instruction-image.jpg?raw=true "Image of application for instruction") 26 | 27 | 1. Right-click on the folder you want to copy 28 | 2. Execute "CopyFolderTool" in the context menu 29 | 3. Now click on ". . ." to select the destination folder (or insert the path into the text field) 30 | 4. Select options by enable the checkboxes 31 | 5. Start copying by pressing the button 32 | 6. A commandline window will open and show the copy process 33 | 34 | ## Future plans 35 | 36 | 1. Save-mode to restart copy process 37 | 2. ~~Comparing Folders only~~ 38 | 3. ~~Option to start exe without parameters~~ (Done) 39 | -------------------------------------------------------------------------------- /CopyFolderTool/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Resources; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | using System.Windows; 6 | 7 | // Allgemeine Informationen über eine Assembly werden über die folgenden 8 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 9 | // die einer Assembly zugeordnet sind. 10 | [assembly: AssemblyTitle("CopyFolderTool")] 11 | [assembly: AssemblyDescription("A simple Robocopy GUI")] 12 | [assembly: AssemblyConfiguration("")] 13 | [assembly: AssemblyCompany("Tobias Wilhelm")] 14 | [assembly: AssemblyProduct("CopyFolderTool")] 15 | [assembly: AssemblyCopyright("Copyright © 2022")] 16 | [assembly: AssemblyTrademark("")] 17 | [assembly: AssemblyCulture("")] 18 | 19 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly 20 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von 21 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. 22 | [assembly: ComVisible(false)] 23 | 24 | //Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie 25 | //ImCodeVerwendeteKultur in der .csproj-Datei 26 | //in einer fest. Wenn Sie in den Quelldateien beispielsweise Deutsch 27 | //(Deutschland) verwenden, legen Sie auf \"de-DE\" fest. Heben Sie dann die Auskommentierung 28 | //des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile, 29 | //sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt. 30 | 31 | //[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] 32 | 33 | 34 | [assembly: ThemeInfo( 35 | ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher 36 | //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird, 37 | // oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.) 38 | ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs 39 | //(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird, 40 | // designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.) 41 | )] 42 | 43 | 44 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 45 | // 46 | // Hauptversion 47 | // Nebenversion 48 | // Buildnummer 49 | // Revision 50 | // 51 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, 52 | // indem Sie "*" wie unten gezeigt eingeben: 53 | // [assembly: AssemblyVersion("1.0.*")] 54 | [assembly: AssemblyVersion("1.3.0.0")] 55 | [assembly: AssemblyFileVersion("1.3.0.0")] 56 | [assembly: NeutralResourcesLanguage("en")] 57 | -------------------------------------------------------------------------------- /CopyFolderTool/UserSettings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace CopyFolderTool { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.4.0.0")] 16 | internal sealed partial class UserSettings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static UserSettings defaultInstance = ((UserSettings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new UserSettings()))); 19 | 20 | public static UserSettings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("C:\\logs\\")] 29 | public string logFilePath { 30 | get { 31 | return ((string)(this["logFilePath"])); 32 | } 33 | set { 34 | this["logFilePath"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("Backup")] 41 | public string excludedFolders { 42 | get { 43 | return ((string)(this["excludedFolders"])); 44 | } 45 | set { 46 | this["excludedFolders"] = value; 47 | } 48 | } 49 | 50 | [global::System.Configuration.UserScopedSettingAttribute()] 51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 52 | [global::System.Configuration.DefaultSettingValueAttribute("*.bak")] 53 | public string excludedFiletypes { 54 | get { 55 | return ((string)(this["excludedFiletypes"])); 56 | } 57 | set { 58 | this["excludedFiletypes"] = value; 59 | } 60 | } 61 | 62 | [global::System.Configuration.UserScopedSettingAttribute()] 63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 64 | public int threads { 65 | get { 66 | return ((int)(this["threads"])); 67 | } 68 | set { 69 | this["threads"] = value; 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /CopyFolderTool/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // Dieser Code wurde von einem Tool generiert. 4 | // Laufzeitversion: 4.0.30319.42000 5 | // 6 | // Änderungen an dieser Datei können fehlerhaftes Verhalten verursachen und gehen verloren, wenn 7 | // der Code erneut generiert wird. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | 12 | namespace CopyFolderTool.Properties 13 | { 14 | /// 15 | /// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw. 16 | /// 17 | // Diese Klasse wurde von der StronglyTypedResourceBuilder-Klasse 18 | // über ein Tool wie ResGen oder Visual Studio automatisch generiert. 19 | // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen 20 | // mit der Option /str erneut aus, oder erstellen Sie Ihr VS-Projekt neu. 21 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 22 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 23 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 24 | internal class Resources 25 | { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() 33 | { 34 | } 35 | 36 | /// 37 | /// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird. 38 | /// 39 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 40 | internal static global::System.Resources.ResourceManager ResourceManager 41 | { 42 | get 43 | { 44 | if ((resourceMan == null)) 45 | { 46 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CopyFolderTool.Properties.Resources", typeof(Resources).Assembly); 47 | resourceMan = temp; 48 | } 49 | return resourceMan; 50 | } 51 | } 52 | 53 | /// 54 | /// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle 55 | /// Ressourcenlookups, die diese stark typisierte Ressourcenklasse verwenden. 56 | /// 57 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 58 | internal static global::System.Globalization.CultureInfo Culture 59 | { 60 | get 61 | { 62 | return resourceCulture; 63 | } 64 | set 65 | { 66 | resourceCulture = value; 67 | } 68 | } 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /CopyFolderTool/MainWindow.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |