我有多个按 1 到 246 排序的 tiff 图像。我使用 imagemagick 将它们转换为 PDF 文件convert *.tif out.pdf
。但是,pdf 文件内的页面顺序不同;(例如,第 2 页是图像 10,依此类推)。当我运行dir
或时,ls
我得到如下无序文件:
21/06/2018 16:15 <DIR> .
21/06/2018 16:15 <DIR> ..
21/06/2018 15:51 2.056 1.tif
21/06/2018 15:51 98.710 10.tif
21/06/2018 15:51 96.492 100.tif
21/06/2018 15:51 44.064 101.tif
21/06/2018 15:51 70.960 102.tif
21/06/2018 15:51 85.254 103.tif
21/06/2018 15:51 92.750 104.tif
21/06/2018 15:51 87.672 105.tif
21/06/2018 15:51 90.284 106.tif
21/06/2018 15:51 79.532 107.tif
21/06/2018 15:51 85.956 108.tif
21/06/2018 15:51 22.452 109.tif
21/06/2018 15:51 91.796 11.tif
(...)
我想要的是:
21/06/2018 16:15 <DIR> .
21/06/2018 16:15 <DIR> ..
21/06/2018 15:51 2.056 1.tif
21/06/2018 15:51 98.710 2.tif
21/06/2018 15:51 96.492 3.tif
21/06/2018 15:51 44.064 4.tif
21/06/2018 15:51 70.960 5.tif
21/06/2018 15:51 85.254 6.tif
21/06/2018 15:51 92.750 7.tif
21/06/2018 15:51 87.672 8.tif
21/06/2018 15:51 90.284 9.tif
21/06/2018 15:51 98.710 10.tif
21/06/2018 15:51 91.796 11.tif
(...)
我如何按数字顺序对文件进行排序?
答案1
使用以下批处理文件将文件重命名为 3 位数字名称。然后,您可以使用 Windows 的默认排序顺序来使您的 PDF 文件正确。
@echo off
setlocal enableextensions enabledelayedexpansion
for %%f in (*.tif) do (
set FileName=%%~nf
set FileName=00!FileName!
set FileName=!FileName:~-3!
set FileName=!FileName!%%~xf
ren "%%f" "!FileName!"
)
执行上述批处理文件时,文件名将更改为001.tif, 002.tif, 020.tif... etc
。imagemagick
将使用默认排序顺序并生成正确的 PDF。
答案2
你喜欢某些 powershell 吗?例如:
$D = get-childitem
$B = foreach ($F in $D) {
"{0,30}" -f $F.Name
}
$B | sort
生产:
PS C:\temp\test> c:\temp\numdir.ps1
1.txt
2.txt
10.txt
100.txt
答案3
以下是整整八行 Python 代码,无需任何特定于操作系统的脚本即可完成此操作。我已将其设置为允许使用文件前缀(在您的情况下没有文件前缀,因此第 3 行是 '')。将其变成更花哨的命令行工具可能会很有趣,但上面相同平台特定解决方案的基本逻辑核心在这里更容易看到:
import os
ld = os.listdir()
i = len('') # if files have a prefix, set it here
m = len(max(ld,key = len))
for f in ld:
d = m - len(f)
if d > 0:
os.rename(f,f[:i] + "00000"[:d] + f[i:])
其中 ld = 列出目录;i = 任何零的插入点,由命名前缀的长度决定(在没有前缀的情况下它是 0,但 len('test') 对于 'test1.tif' 到 'test123.tif' 将使插入点为 4);m = 目录中最长文件名的长度;d = 最长文件名与当前正在检查的文件的长度差。希望这对您有所帮助。
答案4
我还发现,这种 printf() 样式的转义将导致 ImageMagick 连续创建输出文件和填充零--并且您可以使用这个擒纵机构做其他有用的事情。
magick input*.png -resize 50% output%03d.png
上面的代码应该会根据输入文件系列创建 output001.png、output002.png 等,但请注意,这大概是按照操作系统遇到文件的顺序进行的。我还没有弄乱它。
资料来源:
https://www.imagemagick.org/discourse-server/viewtopic.php?t=32626