我有一个程序处理我的一些图像并将它们返回到我的目录。有趣的是,它们现在都是 png 图像而不是 gif。
起初我认为这是简单的重命名,但我使用 createimagefrompng() 对 php 进行了测试,如果图像不是有效的 png 文件,它将抛出错误。没有返回错误。
这是否给我 100% 准确的结果不是这里的问题,问题是我想以类似的方式重命名所有这些文件。
现在虽然我可以编写一个 php 文件来为我执行此操作,但我想知道如何以批处理或 c# 或 java 的方式执行以下操作。
所有这些文件仍然包含字符串“.gif”,我想删除它。 在 php 中,它就像使用 foreach 循环一样简单,读取文件,使用 str_replace,然后销毁旧文件并写入新文件。
我有点不知道如何批量执行此操作,C# 或 Java,有人可以帮我吗?
此外,我运行的是 Windows Vista,并且安装了 Powershell 1.0。
解决方案 1 - C#:
var files = Directory.GetFiles(@"C:\Downloads\Temp\test\");
foreach (var file in files)
{
if(file.Contains(".gif"))
{
string testing = string.Format("{0}.png", Path.GetFileNameWithoutExtension(file.Replace(".gif", "")));
File.Move(file, @"C:\Downloads\Temp\test\"+testing);
}
}
最佳答案
在命令行上:
(假设没有 .gif 文件)
REM first rename all .gif.png to .gif
for %i in (*.gif.png) do ren %i %~ni
REN then rename all .gif to .png
for %i in (*.gif) do ren %~ni.gif %~ni.png
使用 for/help 找出您的 Windows 版本支持的 % 选项。
以下不适用于 .gif.png,抱歉我看错了那部分。
在命令行上(更简单!):
ren *.gif *.png
Java 版本(固定为 .gif.png):
import java.io.File;
import java.io.FilenameFilter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main
{
public static void main(final String[] argv)
{
final File dir;
final File[] entries;
dir = new File(argv[0]);
entries = dir.listFiles(new FilePatternFilter(".*\\.gif\\.png"));
for(final File entry : entries)
{
if(entry.isFile())
{
final String path;
final String newPath;
final File newEntry;
path = entry.getPath();
newPath = path.substring(0, path.length() - "gif.png".length()) + "png";
newEntry = new File(newPath);
if(!(entry.renameTo(newEntry)))
{
System.err.println("could not rename " + entry.getPath() +
" to " + newEntry.getPath());
}
}
}
}
}
关于c# - 一次又一次地以相同的方式重命名文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/679485/