public int Run(RunArgs ra) { ra.State.DestinationDir = ra.RootDir.FullName; Utils.ReadString("destination dir: ", ref ra.State.DestinationDir); Utils.ReadInt("number length with zero padding (6) : ", ref ra.State.PadZeroes); Utils.ReadString("search pattern (*.*): ", ref ra.State.SearchPattern); var useexisting = false; if (ra.State.Files != null && ra.State.Files.Length > 0) { string.Format( "There are {0} files from a previous subprogram run. {1}Frst of the old files: {2} ", ra.State.Files.Length, Environment.NewLine, ra.State.Files[0]).PrintLine(); useexisting = Utils.ReadWord("Use them? (y/*) ", "y"); } if (!useexisting) { ra.State.Files = ra.RootDir.GetFiles(ra.State.SearchPattern, SearchOption.TopDirectoryOnly); } else if (Utils.ReadWord(string.Format("Change the root dir ({0}) ? (y/*)", ra.RootDir.FullName), "y")) { var newroot = string.Empty; Utils.ReadString("Enter new root dir: ", ref newroot, true); ra.ChangeRoot(newroot); } string.Format("There are {0} matches.", ra.State.Files.Length).PrintLine(); ra.Trace = Utils.ReadWord("Trace first? (y/*): ", "y"); var FI = new List <FileInfo>(); if (ra.Trace) { PadFiles(ra, FI); } if (Utils.ReadWord("Pad all? (y/*): ", "y")) { PadFiles(ra, FI, true); ra.State.Files = FI.ToArray(); $"Done - {ra.State.Files.Length} files renamed.".PrintLine(); } else { "Aborting pad.".PrintLine(); } return(0); }
public int Run(RunArgs ra) { Utils.ReadString("the path of the text file with the new file names: ", ref ra.State.FileNamesFilePath, true); Utils.ReadString("destination dir: ", ref ra.State.DestinationDir, true); Utils.ReadString("search pattern (*.*): ", ref ra.State.SearchPattern); Utils.ReadString("prefix: ", ref ra.State.Prefix); Utils.ReadString("name from file prefix: ", ref ra.State.NameFromFilePrefix); Utils.ReadInt("counter (0) : ", ref ra.State.NameCounter); Utils.ReadInt("counter step (1) : ", ref ra.State.NameCounterStep); Utils.ReadInt("number length with zero padding (6) : ", ref ra.State.PadZeroes); "sort options: no-0, asc name-1, desc name-2, randomize-3, asc createdate-4, desc createdate-5. ".PrintLine(); int sort = 0; Utils.ReadIntIn("sort first (no) : ", ref sort, new int[] { 0, 1, 2, 3, 4, 5 }); ra.State.Sort = (SortType)sort; var useexisting = false; if (ra.State.Files != null && ra.State.Files.Length > 0) { string.Format( "There are {0} files from a previous subprogram run. {1}The first of the old files: {2} ", ra.State.Files.Length, Environment.NewLine, ra.State.Files[0]).PrintLine(); useexisting = Utils.ReadWord("Use them? (y/*) ", "y"); } if (!useexisting) { ra.State.Files = ra.RootDir.GetFiles(ra.State.SearchPattern, SearchOption.TopDirectoryOnly); } else if (Utils.ReadWord(string.Format("Change the root dir ({0}) ? (y/*)", ra.RootDir.FullName), "y")) { var newroot = string.Empty; Utils.ReadString("Enter new root dir: ", ref newroot, true); ra.ChangeRoot(newroot); } ra.State.SortFiles(ra.State.Sort); string.Format("There are {0} matches.", ra.State.Files.Length).PrintLine(); ra.Trace = Utils.ReadWord("Trace first? (y/*): ", "y"); var newNames = File.ReadAllLines(ra.State.FileNamesFilePath); if (newNames.Length < ra.State.Files.Length) { var msg = string.Format( "The new names length is {0} and the files to be renamed are {1}. Abort? (y/*)", newNames.Length, ra.State.Files.Length); if (Utils.ReadWord(msg, "y")) { return(-1); } } string.Format("Files - {0}, Names - {1}", newNames.Length, ra.State.Files.Length).PrintLine(ConsoleColor.Yellow); if (ra.Trace) { var tcounter = ra.State.NameCounter; var i = 0; foreach (var f in ra.State.Files) { if (f.FullName == ra.Me) { continue; } tcounter += ra.State.NameCounterStep; var padded = PadNumbers.PadZeroes(tcounter.ToString(), ra.State.PadZeroes); var newname = string.Format("{0}{1}{2}{3}{4}", ra.State.Prefix, padded, ra.State.NameFromFilePrefix, newNames[i], f.Extension); var newpath = Path.Combine(ra.State.DestinationDir, newname); string.Format(f.Name + " --> " + newpath).PrintLine(ConsoleColor.Yellow); i++; } } if (Utils.ReadWord("Rename all? (y/*): ", "y")) { var FI = new List <FileInfo>(); var i = 0; foreach (var f in ra.State.Files) { if (f.FullName == ra.Me) { continue; } ra.State.IncrementCounter(); var padded = PadNumbers.PadZeroes(ra.State.NameCounter.ToString(), ra.State.PadZeroes); var newname = string.Format("{0}{1}{2}{3}{4}", ra.State.Prefix, padded, ra.State.NameFromFilePrefix, newNames[i], f.Extension); var newpath = Path.Combine(ra.State.DestinationDir, newname); File.Move(f.FullName, newpath); FI.Add(new FileInfo(newpath)); i++; } ra.State.Files = FI.ToArray(); $"Done - {ra.State.Files.Length} files renamed.".PrintLine(); } else { "Aborting rename.".PrintLine(); } return(0); }
public int Run(RunArgs ra) { "The Log can:".PrintLine(); " (log) save the file names in the current dir".PrintLine(); " (restore) move the files from a log file to a destination dir".PrintLine(); var mode = ""; while (mode != "log" && mode != "restore") { Utils.ReadString("mode (log) or (restore): ", ref mode, true); } var newSrc = string.Empty; Utils.ReadString("Source dir [default is local]: ", ref newSrc); if (!string.IsNullOrEmpty(newSrc)) { ra.ChangeRoot(newSrc); } Utils.ReadString("search pattern (*.*): ", ref ra.State.SearchPattern); if (mode == "log") { var currentDir = Utils.ReadWord("Recursive? [default is yes] (n/*): ", "n"); var justNames = Utils.ReadWord("Log full paths? [default is yes] (n/*): ", "n"); var F = new List <string>(); foreach (var f in ra.RootDir.GetFiles(ra.State.SearchPattern, currentDir ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories)) { F.Add(justNames ? f.Name : f.FullName); } string.Format("Found {0} matching files.", F.Count).PrintLine(); if (F.Count > 0) { if (Utils.ReadWord("See them? (y/*): ", "y")) { foreach (var f in F) { f.PrintLine(ConsoleColor.Yellow); } } "Save as (file path): ".Print(); var p = Path.GetFullPath(Console.ReadLine()); File.WriteAllLines(p, F.ToArray()); string.Format("Name file saved as {0}", p).PrintLine(); } "Done.".PrintLine(); } else { var logfilePath = string.Empty; Utils.ReadString("Log file path: ", ref logfilePath, true); var paths = File.ReadAllLines(logfilePath); var recursive = Utils.ReadWord("Recursive search? (y/*): ", "y"); var copy = Utils.ReadWord("Copy? [default is move] (y/*): ", "y"); var so = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; var allFiles = Directory.GetFiles(ra.RootDir.FullName, ra.State.SearchPattern, so); var origMap = new Dictionary <string, string>(); var localMap = new Dictionary <string, string>(); foreach (var path in paths) { var jn = Path.GetFileName(path); if (!origMap.ContainsKey(jn)) { origMap.Add(jn, path); } else { $"Log file name duplicate {jn}".Print(ConsoleColor.Yellow, null, true); } } foreach (var path in allFiles) { var jn = Path.GetFileName(path); if (!localMap.ContainsKey(jn)) { localMap.Add(jn, path); } else { $"Local file name duplicate {jn}".Print(ConsoleColor.Yellow, null, true); } } var list = new List <string>(localMap.Keys.Intersect(origMap.Keys)); $"{list.Count} files match by name.".PrintLine(); if (list.Count > 0) { if (Utils.ReadWord("See them? (y/*): ", "y")) { foreach (var fn in list) { $"{localMap[fn]} -> {origMap[fn]}".PrintLine(); } } if (Utils.ReadWord("Restore? (y/*): ", "y")) { foreach (var fn in list) { if (copy) { File.Copy(localMap[fn], origMap[fn], true); } else { File.Move(localMap[fn], origMap[fn], true); } } } else { "Aborting".PrintLine(); } } "Done.".PrintLine(); } return(0); }
public int Run(RunArgs ra) { bool interactive = !ra.InArgs.ContainsKey("-ni"); var newSrc = string.Empty; ra.State.SearchPattern = "*.*"; var currentDirOnly = false; var justNames = false; var logOutFile = string.Empty; if (interactive) { Utils.ReadString("Source dir [default is local]: ", ref newSrc); Utils.ReadString("search pattern (*.*): ", ref ra.State.SearchPattern); currentDirOnly = Utils.ReadWord("Recursive? [default is yes] (n/*): ", "n"); justNames = Utils.ReadWord("Log full paths? [default is yes] (n/*): ", "n"); } else { if (ra.InArgs.ContainsKey("-src")) { newSrc = ra.InArgs.GetFirstValue("-src"); } if (ra.InArgs.ContainsKey("-flt")) { ra.State.SearchPattern = ra.InArgs.GetFirstValue("-flt"); } currentDirOnly = ra.InArgs.ContainsKey("-nrec"); justNames = ra.InArgs.ContainsKey("-nfp"); if (ra.InArgs.ContainsKey("-out")) { logOutFile = ra.InArgs.GetFirstValue("-out"); } else { throw new ArgumentNullException("-out"); } } if (!string.IsNullOrEmpty(newSrc)) { ra.ChangeRoot(newSrc); } var F = new List <string>(); foreach (var f in ra.RootDir.GetFiles(ra.State.SearchPattern, currentDirOnly ? SearchOption.TopDirectoryOnly : SearchOption.AllDirectories)) { F.Add(justNames ? f.Name : f.FullName); } if (interactive) { string.Format("Found {0} matching files.", F.Count).PrintLine(); if (F.Count > 0) { if (Utils.ReadWord("See them? (y/*): ", "y")) { foreach (var f in F) { f.PrintLine(ConsoleColor.Yellow); } } "Save as (file path): ".Print(); logOutFile = Path.GetFullPath(Console.ReadLine()); } } File.WriteAllLines(logOutFile, F.ToArray()); string.Format("Name file saved as {0}", logOutFile).PrintLine(); "Done.".PrintLine(); return(0); }
public int Run(RunArgs ra) { var interactive = !ra.InArgs.ContainsKey("-ni"); var err = ra.InArgs.ContainsKey("-err"); string src = ra.RootDir.FullName; if (interactive) { Utils.ReadString("Source dir (current): ", ref src); Utils.ReadString("Search pattern (*.*): ", ref ra.State.SearchPattern); } else { ra.ChangeRoot(ra.InArgs.GetFirstValue("-src")); if (ra.InArgs.ContainsKey("-sp")) { ra.State.SearchPattern = ra.InArgs.GetFirstValue("-sp"); } } var d = new DirectoryInfo(src); var All = new List <FileInfo>(); var searchOpt = SearchOption.AllDirectories; try { var D = d.EnumerateDirectories("*", searchOpt).GetEnumerator(); foreach (var file in d.EnumerateFiles(ra.State.SearchPattern, SearchOption.TopDirectoryOnly)) { All.Add(file); } while (true) { try { if (!D.MoveNext()) { break; } foreach (var file in D.Current.EnumerateFiles(ra.State.SearchPattern, SearchOption.TopDirectoryOnly)) { All.Add(file); } } catch (Exception ex) { if (err) { ex.Message.PrintLine(ConsoleColor.Red); } } } } catch (Exception ex) { if (err) { ex.Message.PrintLine(ConsoleColor.Red); } } $"{Environment.NewLine}There are {All.Count} matches: {Environment.NewLine}".PrintLine(); foreach (var f in All) { f.FullName.PrintLine(); } "".PrintLine(); return(0); }
public int Run(RunArgs ra) { bool interactive = !ra.InArgs.ContainsKey("-ni"); int sort = 4; string src = null; ra.Trace = false; ra.State.NameCounter = int.MinValue; if (interactive) { Utils.ReadString("Source dir (current): ", ref src); if (!string.IsNullOrEmpty(src)) { ra.ChangeRoot(src); } Utils.ReadString("Destination dir: ", ref ra.State.DestinationDir, true); Utils.ReadString("Search pattern (*.*): ", ref ra.State.SearchPattern); Utils.ReadString("Prefix: ", ref ra.State.Prefix); Utils.ReadInt("Counter start value (default is prefix only): ", ref ra.State.NameCounter); if (ra.State.NameCounter > int.MinValue) { Utils.ReadInt("Counter step (1): ", ref ra.State.NameCounterStep); Utils.ReadInt("Number length with zero padding (6): ", ref ra.State.PadZeroes); "Sort options: no-0, asc name-1, desc name-2, randomize-3, asc createdate-4, desc createdate-5. ".PrintLine(); Utils.ReadIntIn("Option (4): ", ref sort, new int[] { 0, 1, 2, 3, 4, 5 }); } } else { ra.ChangeRoot(ra.InArgs.GetFirstValue("-src")); ra.State.DestinationDir = ra.InArgs.GetFirstValue("-dest"); if (ra.InArgs.ContainsKey("-sp")) { ra.State.SearchPattern = ra.InArgs.GetFirstValue("-sp"); } if (ra.InArgs.ContainsKey("-prf")) { ra.State.Prefix = ra.InArgs.GetFirstValue("-prf"); } if (ra.InArgs.ContainsKey("-ic")) { ra.State.NameCounter = int.Parse(ra.InArgs.GetFirstValue("-ic")); } if (ra.InArgs.ContainsKey("-step")) { ra.State.NameCounterStep = int.Parse(ra.InArgs.GetFirstValue("-step")); } if (ra.InArgs.ContainsKey("-zpad")) { ra.State.PadZeroes = int.Parse(ra.InArgs.GetFirstValue("-zpad")); } if (ra.InArgs.ContainsKey("-sort")) { ra.State.PadZeroes = int.Parse(ra.InArgs.GetFirstValue("-sort")); } } ra.State.Sort = (SortType)sort; ra.State.Files = ra.RootDir.GetFiles(ra.State.SearchPattern, SearchOption.TopDirectoryOnly); ra.State.SortFiles(ra.State.Sort); string.Format("There are {0} matches.", ra.State.Files.Length).PrintLine(); if (interactive) { ra.Trace = Utils.ReadWord("Trace first? (y/*): ", "y"); } string padded, newpath, newname; if (ra.Trace) { var tcounter = ra.State.NameCounter; foreach (var f in ra.State.Files) { if (f.FullName == ra.Me) { continue; } if (ra.State.NameCounter > int.MinValue) { tcounter += ra.State.NameCounterStep; padded = PadNumbers.PadZeroes(tcounter.ToString(), ra.State.PadZeroes); newname = string.Format("{0}{1}{2}", ra.State.Prefix, padded, f.Extension); } else { newname = ra.State.Prefix + f.Name; } newpath = Path.Combine(ra.State.DestinationDir, newname); string.Format(f.Name + " --> " + newpath).PrintLine(ConsoleColor.Yellow); } } if (!interactive || Utils.ReadWord("Rename all? (y/*): ", "y")) { var FI = new List <FileInfo>(); foreach (var f in ra.State.Files) { if (f.FullName == ra.Me) { continue; } if (ra.State.NameCounter > int.MinValue) { ra.State.IncrementCounter(); padded = PadNumbers.PadZeroes(ra.State.NameCounter.ToString(), ra.State.PadZeroes); newname = string.Format("{0}{1}{2}", ra.State.Prefix, padded, f.Extension); } else { newname = ra.State.Prefix + f.Name; } newpath = Path.Combine(ra.State.DestinationDir, newname); File.Move(f.FullName, newpath); FI.Add(new FileInfo(newpath)); } ra.State.Files = FI.ToArray(); $"Done - {ra.State.Files.Length} files renamed.".PrintLine(); } else { "Aborting move.".PrintLine(); } return(0); }
public int Run(RunArgs ra) { bool interactive = !ra.InArgs.ContainsKey("-ni"); var newSrc = string.Empty; var logfilePath = string.Empty; var copy = false; var recursive = true; if (interactive) { Utils.ReadString("Source dir [default is local]: ", ref newSrc); Utils.ReadString("search pattern (*.*): ", ref ra.State.SearchPattern); Utils.ReadString("Log file path: ", ref logfilePath, true); recursive = Utils.ReadWord("Recursive search? (y/*): ", "y"); copy = Utils.ReadWord("Copy? [default is move] (y/*): ", "y"); } else { if (ra.InArgs.ContainsKey("-map")) { logfilePath = ra.InArgs.GetFirstValue("-map"); } else { throw new ArgumentNullException("-map"); } if (ra.InArgs.ContainsKey("-src")) { newSrc = ra.InArgs.GetFirstValue("-src"); } if (ra.InArgs.ContainsKey("-flt")) { ra.State.SearchPattern = ra.InArgs.GetFirstValue("-flt"); } recursive = !ra.InArgs.ContainsKey("-nrec"); copy = ra.InArgs.ContainsKey("-copy"); } if (!string.IsNullOrEmpty(newSrc)) { ra.ChangeRoot(newSrc); } var paths = File.ReadAllLines(logfilePath); var so = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; var allFiles = Directory.GetFiles(ra.RootDir.FullName, ra.State.SearchPattern, so); var origMap = new Dictionary <string, string>(); var localMap = new Dictionary <string, string>(); foreach (var path in paths) { var jn = Path.GetFileName(path); if (!origMap.ContainsKey(jn)) { origMap.Add(jn, path); } else { $"Log file name duplicate {jn}".Print(ConsoleColor.Yellow, null, true); } } foreach (var path in allFiles) { var jn = Path.GetFileName(path); if (!localMap.ContainsKey(jn)) { localMap.Add(jn, path); } else { $"Local file name duplicate {jn}".Print(ConsoleColor.Yellow, null, true); } } var list = new List <string>(localMap.Keys.Intersect(origMap.Keys)); $"{list.Count} files match by name.".PrintLine(); if (list.Count > 0) { if (interactive && Utils.ReadWord("See them? (y/*): ", "y")) { foreach (var fn in list) { $"{localMap[fn]} -> {origMap[fn]}".PrintLine(); } } if (!interactive || Utils.ReadWord("Restore? (y/*): ", "y")) { foreach (var fn in list) { if (copy) { File.Copy(localMap[fn], origMap[fn], true); } else { File.Move(localMap[fn], origMap[fn], true); } } } else { "Aborting".PrintLine(); } } "Done.".PrintLine(); return(0); }