问题

问题

问题

我正在尝试对大量标有 ######### 的文件进行排序和重命名

下划线左侧是不会重复的数字(例如 32956715、32956810 等)。
下划线右侧也是会重复的数字(例如 1、2、3 等)。

示例发布于粘贴箱

左侧是扫描编号,右侧是该特定扫描的页面。

我希望能够对下划线左侧的 ZA 和右侧的 AZ 进行排序。

例子:

3_1
3_2
3_3
2_1
2_2
2_3
1_1
1_2
1_3

我愿意接受任何可以达到我想要的结果的建议。

目前,我正在使用 irfanview 将文件名发送到文本文件,然后将文本复制并粘贴到 excel 中,将文件名分成几列,然后按 ZA 对下划线左侧的列进行排序,按 AZ 对下划线右侧的列进行排序。然后我基本上逆转了这个过程,让 irfanview 缩略图查看器使用从我正确排序的 excel 列表创建的 txt 文件加载文件。

一定有更好的方法对吧?

谢谢你!

更新

更多信息试图澄清这个问题。我很尴尬地承认这一点,但最终的结果是打印出这些文件中的每一个,并将它们正面朝上,按时间顺序倒序排列(最新的文档在顶部(正面朝上),最旧的文档在底部(正面朝上))。(打印不是很需要技术,对吧?我还能加入超级用户俱乐部吗?拜托。

客户给了我们一张光盘,里面有图片文档(tiff 或 gif,其中混杂了 jpg)。光盘上可能有 50 到 20000 张图像。我必须将它们打印出来。数字越小,图像越旧,数字越大,图像越新。我正在使用 Irfanview 缩略图查看器批量打印到大型复印机。现在我只能在打印之前按 AZ 顺序对图像进行排序,同时仍保持图像的某种可识别顺序。然后我必须自己查看打印的堆栈并按时间顺序进行反向排序。这非常耗时,而且由于文档中有附件,很难确定一个文档在哪里结束,下一个文档在哪里开始。

评论

我不确定我是否理解了这个问题。如果左边的数字不重复,那么问题就不存在。你不可能出现 30000_1、30000_2 这样的情况,因为左边不重复。​​– Sahil

你说得对。如果扫描的文档有多页,它们确实会重复。我只是想将这种重复与右侧的重复区分开来,右侧的重复总是从 1 开始,并根据文档的页数向上计数。

我想感谢所有已经提问的人。这意味着你至少读过这个问题,如果我没有费尽心思让你感到困惑的话,你会尽力帮助你。我希望我的额外信息能解答我没有具体解决的其他问题。

答案

Lua 脚本答案看起来很有希望,但我在尝试使用它时收到错误。有什么想法吗?

lua -e "io.stdout:setvbuf 'no'" "Reverse_Sort.lua" 
lua: Reverse_Sort.lua:16: attempt to compare number with nil
stack traceback:
 Reverse_Sort.lua:16: in function <Reverse_Sort.lua:6>
 [C]: in function 'sort'
 Reverse_Sort.lua:32: in main chunk
 [C]: ?
Exit code: 1

答案1

既然您说这是一个反复出现的问题,那么脚本是合适的。

这是一个Lua脚本来帮助你。

编辑:我已根据您的补充信息更新了脚本。它将获取一个包含文件名的文件,对其进行排序,然后按排序顺序创建一个新文件。

剧本(已编辑)

-- 从命令行获取输入和输出文件名或选择默认值
输入文件名 = arg[1] 或 'unsorted.txt'
输出文件名 = arg[2] 或 'sorted.txt'

-- 定义自定义排序函数
函数 custom_sort(文件名1,文件名2)

    a,b = 字符串.match(文件名1,'(%d +)_(%d +)')
    c, d = string.match(filename2, '(%d+)_(%d+)')

    a = tonumber(a)
    b = 数值(b)
    c = 数值(c)
    d = 数值(d)

    如果 a > c 那么
        返回 true
    否则,如果 a < c
        返回 false
    别的
        返回 b < d
    结尾
结尾

-- 从文件中读出文件名到表中
本地文件名 = {}
对于 io.lines(input_filename) 中的行
    文件名[# 文件名 + 1] = 行
结尾

-- 使用我们的自定义排序函数对表格进行排序
表.排序(文件名,自定义排序)

-- 将排序后的文件名写入文件
io.output(输出文件名)
对于 _,filename 在 ipairs(filenames) 中执行
    io.write(文件名,'\n')
结尾

-  完毕

Lua 具有 os.rename() 函数来实际执行文件重命名,或者您可以将脚本的文本输出转储到重命名实用程序中。

相关内容