我在“Windows 10”操作系统中有一个文件夹,文件名为;
afilename_1
bfilename_3
cfilename_2
这是它的出现方式。但我需要它根据下划线后面附加的数字进行排序。我想要下划线之前的单词以及它们描述文件描述。
提示:交换以“_”分隔的字词/数字。
预期输出:
1_afilename
2_cfilename
3_bfilename
除手动重命名外还有什么想法吗?
P.S。该文件夹由100个文件组成 Java编程语言的解决方案很明显,但不是强制性的。
更新(10.01.2017):这是一个示例Java代码,用于获取所有文件名作为输出。
File folder = new File("/xxx/ss/folder/");
File[] listOfFiles = folder.listFiles();
for (File file : listOfFiles)
{ if (file.isFile())
{ System.out.println(file.getName());
} }
现在,考虑如何一次获取每个文件名并在循环中完成交换 有什么想法吗?
解决方案:Windows Powershell代码有效。
如果输入:文件名如下
xxx_afilename_1
xxx_bfilename_3
xxx_cfilename_2
然后以下代码有助于获得如上所述的类似输出。
ls | %{ ren $_ ($_.name -replace '.*?-(.*?)-(.*?)(\..*)','$2_$1$3') }
答案 0 :(得分:1)
我有两种方法可以想到。
用C / C ++ / C#或Python或者你有什么东西来编写这是一个相当简单的程序。根据您的专业知识,编写和调试程序可能需要花费很长时间,以便手工完成工作,但更有趣。
优秀的程序员文本编辑器可以从目录列表中获取文件列表,并使用重命名命令生成.bat文件。诸如宏和正则表达式搜索和替换之类的东西使得工作相当轻松。 (我总是推荐jEdit - 免费,多平台和强大的。)
答案 1 :(得分:1)
在Windows Powershell中
ls | %{ ren $_ ($_.name -replace '(.+)_(.+)','$2_$1') }
保持扩展名的更新
ls | %{ ren $_ ($_.name -replace '(.+)_(.+)(\..+)','$2_$1$3') }