既然Ruby的简单版和C#的版本都写了,写个F#版来对比一下也不错。
下面的程序逻辑基本上与前一篇的C#版类似,只是在如何抽取出文件名中的各部分的实现用了不同的划分方式:C#版的TryGetRenameName()方法更倾向于直接支持不同的pattern和format;F#版则是直接把pattern和format硬编码到parseFilename和getReformattedFilename函数里了。到底该怎么划分好我也不太肯定,不过在这么小的程序里划分方式好不好体现不出来,或许也不值得多想吧?
ReformatComiketFilenames.fsx
F#代码
#light open System open System.IO open System.Text.RegularExpressions let parseFilename name = let result = Regex.Match(name, @"^\(([^)]+)\)\s*\(([^)]+)\)\s*\[([^\]]+)\]\s*(.+)$") let success = result.Success let comiketNum = result.Groups.Item(1).Value let contentType = result.Groups.Item(2).Value let circleName = result.Groups.Item(3).Value let itemName = result.Groups.Item(4).Value success, comiketNum, contentType, circleName, itemName let getReformattedFilename name = let success, comiketNum, contentType, circleName, itemName = parseFilename name if success then sprintf "(%s)(%s)[%s] %s" comiketNum contentType circleName itemName else name let reformatAndRenameDir (dirInfo : DirectoryInfo) = let name = dirInfo.Name let destName = getReformattedFilename name if name <> destName then printfn "%s" destName dirInfo.MoveTo(Path.Combine(dirInfo.Parent.FullName, destName)) true else false let reformatAndRenameFile (fileInfo : FileInfo) = let name = fileInfo.Name let destName = getReformattedFilename name if name <> destName then printfn "%s" destName fileInfo.MoveTo(Path.Combine(fileInfo.DirectoryName, destName)) true else false let getRootDir = fun () -> #if COMPILED let args = Environment.GetCommandLineArgs () #else let args = fsi.CommandLineArgs #endif let rootPath = match args with | [| _ |] -> new DirectoryInfo(Environment.CurrentDirectory); | _ -> new DirectoryInfo(args.[1]) rootPath let main = fun () -> let root = getRootDir () Array.iter (fun dir -> (reformatAndRenameDir dir; ())) (root.GetDirectories()) Array.iter (fun file -> (reformatAndRenameFile file; ())) (root.GetFiles()) main ()
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, result
, name
, let
contenttype
shell脚本获取文件名、批量修改文件名脚本、bat脚本修改文件名、bat脚本获取文件名、shell脚本读取文件名,以便于您获取更多的相关知识。
时间: 2024-12-22 02:11:09