问题
我正在尝试对大量标有 ######### 的文件进行排序和重命名
下划线左侧是不会重复的数字(例如 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() 函数来实际执行文件重命名,或者您可以将脚本的文本输出转储到重命名实用程序中。