创建一个 perl 脚本来批处理文件
Posted
技术标签:
【中文标题】创建一个 perl 脚本来批处理文件【英文标题】:Creating a perl script to batch process files 【发布时间】:2011-07-17 21:08:48 【问题描述】:我有这行代码:
convert 1234_Page_1_....png 1234_Page_2_....png output.pdf
这会将那些特定的 png 合并为一个 pdf(使用 ImageMagick)。我有一堆这种格式的文件。我想对“Page”之前具有相同编号的文件执行此合并/转换为 pdf 操作。有时要转换的页面超过两页。
我想在一个可以在 Windows 上运行的 perl 脚本中完成这项工作。
提前致谢, 杰克
【问题讨论】:
【参考方案1】:如果您想尽可能少地调用 convert(1):
#! /usr/bin/perl
use strict;
use warnings;
my %processed = ();
for my $prefix (map /^(\d+)/ glob('[1-9]*_Page_*.png'))
next if $processed$prefix++;
system("convert $prefix_Page_*.png $prefix_output.pdf");
【讨论】:
【参考方案2】:如果您安装了cygwin(也许也安装了mingw?),试试这个:
for i in `seq 1234 1350` ; do convert $i_Page_*.png $i_output.pdf ; done
【讨论】:
谢谢,但是如果序列中缺少文件,脚本会挂掉吗? 杰克,不,但它会抛出丑陋的错误消息,可能隐藏重要的失败。 我收到了这条消息:在 script.pl 第 1 行的循环变量上缺少 $。 这是一个 bash 脚本,它在 perl 中不起作用。如果您还没有安装 cygwin 或 mingw,那么可能不值得这么麻烦。但是,如果您确实安装了它们(并且很多程序员都这样做了:),那么它对于其中一些操作来说是一个简单的工具。 我安装了 cygwin,但是当我尝试运行脚本时,我收到错误:line:1 syntax error near unexpected token '$'\r'' line:1 'for i in 'seq 312800 312860' ;【参考方案3】:您不能为此使用星号吗?我马上试试。
convert 1234_Page_*.png output.pdf
如果你想要可读的文件,你去:
import os
for i in xrange(int(raw_input('How many sets of pages are there? '))):
os.system('convert 0_Page_*.png output_0.pdf'.format(str(i)))
这是一个单行:
python -c "import os; [os.system('convert 0_Page_*.png output_0.pdf'.format(str(i))) for i in xrange(int(raw_input('How many sets of pages are there? ')))]"
【讨论】:
我相信是这样,但我正在寻找帮助循环浏览我拥有的所有文件。 IE。 1234、1235、1236 等。我有数千个这样的文件。 哦,好的。你介意 Python 脚本吗?我可以很容易地为此运行一个命令。 我的和你的没什么不同。我的只是问你有多少页,如果你输入一个大数字,它会进入死亡计数,锁定控制台窗口直到它完成;) 也许没有那么不同,但 Python 可能比 cygwin 或 mingw 更普遍。 :) 我实际上是在写一个 Python shell,只是因为我不知道如何使用 Bash ;) 它叫做 Pysh。很有创意吧?以上是关于创建一个 perl 脚本来批处理文件的主要内容,如果未能解决你的问题,请参考以下文章