默认按数字列出 cmd.exe 中的文件,以根据帧序列生成 gif

默认按数字列出 cmd.exe 中的文件,以根据帧序列生成 gif

大家好,

我正在尝试通过以下方式使用 imagemagick 创建动画:

convert -delay 80 -loop 0 *.png ani.gif

逻辑是找到所有 .png 文件,但文件名没有按数字顺序列出。这导致动画序列构建得不好。

例如

-a---         3/17/2015   8:36 PM      14147 26.png
-a---         3/17/2015   8:37 PM      13904 260.png
-a---         3/17/2015   8:37 PM      13981 261.png
-a---         3/17/2015   8:37 PM      13863 262.png
-a---         3/17/2015   8:37 PM      14026 263.png
-a---         3/17/2015   8:37 PM      14023 264.png
-a---         3/17/2015   8:37 PM      14038 265.png
-a---         3/17/2015   8:37 PM      13913 266.png
-a---         3/17/2015   8:37 PM      14003 267.png
-a---         3/17/2015   8:37 PM      14000 268.png
-a---         3/17/2015   8:37 PM      13887 269.png
-a---         3/17/2015   8:36 PM      14025 27.png

我尝试强制目录按时间和日期列出,但无济于事:

set dircmd=/o:d

我怎样才能让文件在内部列出如下:

-a---         3/17/2015   8:36 PM      14147 26.png
-a---         3/17/2015   8:36 PM      14025 27.png
-a---         3/17/2015   8:37 PM      13904 260.png
-a---         3/17/2015   8:37 PM      13981 261.png
-a---         3/17/2015   8:37 PM      13863 262.png
-a---         3/17/2015   8:37 PM      14026 263.png
-a---         3/17/2015   8:37 PM      14023 264.png
-a---         3/17/2015   8:37 PM      14038 265.png
-a---         3/17/2015   8:37 PM      13913 266.png
-a---         3/17/2015   8:37 PM      14003 267.png
-a---         3/17/2015   8:37 PM      14000 268.png
-a---         3/17/2015   8:37 PM      13887 269.png

那么当运行转换命令时,正确的序列会被压入 gif 中吗?

答案1

假设您使用通配符时,转换程序会按名称的字母顺序对文件进行排序。最简单的解决方案是使用零填充重命名文件,以便文件名按正确的数字顺序排序。

我编写了一个混合 JScript/批处理实用程序,名为杰任巴特可以使用正则表达式替换来重命名文件。它是纯脚本,可​​以在 XP 及以上版本的任何 Windows 机器上本地运行。

杰任巴特使解决方案变得非常简单(例如,假设您还没有与 27.png 冲突的现有 027.png):

jren "^\d+(?=\.png)" "lpad($0,'000')" /j

运行该命令后,名为 5.png 的文件将变为 005.png,而 27.png 将变为 027.png。然后,您原来的转换命令应该能够按正确的顺序处理文件。

使用jren /?获取有关 JREN.BAT 的众多选项的完整文档


您可以使用纯批处理进行重命名,但这并不方便

@echo off
setlocal enableDelayedExpansion
for /f "delims=" %%F in (
  'dir /b /a-d ???.png ^| findstr "^[0-9][0-9]*\.png$" /i'
) do (
  set "num=000%%~nF"
  ren "%%F" "!num:~-3!%%~xF"
)

相关内容