Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Windows上刷新PNG的整个目录树?_Java_Php_Recursion_Pngcrush - Fatal编程技术网

Java 如何在Windows上刷新PNG的整个目录树?

Java 如何在Windows上刷新PNG的整个目录树?,java,php,recursion,pngcrush,Java,Php,Recursion,Pngcrush,这个问题和标题中的问题差不多 我有很多由MapTiler创建的PNG文件。确切地说是24083个文件。它们位于多个文件夹中的多个文件夹中,即文件夹树,duh。问题是,手动完成所有这些任务是最大的时间浪费 有谁有算法可以和我分享吗?一个可以反复粉碎所有这些PNG的人 我有一台Windows PC,我希望它是Java或PHP语言,而不是其他语言(因为我已经很熟悉它),但其他的东西也可以 谢谢 程序“sweep”允许您递归地对目录中的所有文件运行相同的命令。请参阅:with and(或类似) 有了它,

这个问题和标题中的问题差不多

我有很多由MapTiler创建的PNG文件。确切地说是24083个文件。它们位于多个文件夹中的多个文件夹中,即文件夹树,duh。问题是,手动完成所有这些任务是最大的时间浪费

有谁有算法可以和我分享吗?一个可以反复粉碎所有这些PNG的人

我有一台Windows PC,我希望它是Java或PHP语言,而不是其他语言(因为我已经很熟悉它),但其他的东西也可以

谢谢

程序“sweep”允许您递归地对目录中的所有文件运行相同的命令。

请参阅:with and(或类似)

有了它,您可以使用:

$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('%your-top-directory%'));
foreach ($it as $entry) {
  if (strtolower($entry->getExtension()) == 'png') {
     // execute command here
  }
}

您不需要为此做任何特殊操作,只需在Windows命令提示符下使用
for
命令即可

使用此行:

FOR /R "yourdir" %f IN (*.png) DO pngcrush "%f" "%f.crushed.png"
“yourdir”
是存储输入文件的根目录

结尾的两个
%f

  • 第一个是输入文件名
  • 第二个是输出文件名
要使操作到位,请执行以下操作:

FOR /R "yourdir" %f IN (*.png) DO pngcrush -ow "%f"

有关
的更多信息,请参见

手动刷新所有这些文件并非不可能。这将需要很长的时间,但这并不等同于它实际上是不可能的。清扫是如何工作的?我无法2次单击它(它只是再次关闭),如果我将主文件夹拖到其中/上方,它将不起作用。这是一个命令行程序,因此您需要打开
cmd
并键入您的内容。PNGCrush也可以从命令行运行,所以您应该很好。刚刚选中,它可能只在每个目录中运行一次,因此您可能需要使用
FOR
@Gerco将其与其他答案结合使用,这会覆盖主文件夹中多个文件夹中的所有png吗?(递归)@Nideo:是的,它是递归的,将处理该目录下的所有png文件。Sweet,现在就试试吧。Thanks@Gerco,您能帮我设置pngcrush以便CMD使用吗?它告诉我“pngcrush”不被识别。。。我必须将哪个文件复制到哪个文件夹才能使该命令存在?(我没有CMD的经验,只使用了“cd”)上面的命令抛出了一个错误,它不能覆盖现有的文件。我对它做了一些修改,现在可以工作了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。对于/R“E:\workspace\pngs”%f IN(*.png)DO(E:\workspace\pngcrush\pngcrush.exe-brute”%f“%f-crasted.png”和移动/Y”%f-crasted.png“%f”)