创建一个 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 脚本来批处理文件的主要内容,如果未能解决你的问题,请参考以下文章

通过从perl脚本调用的批处理文件设置环境变量

一个文本处理的perl脚本

我的 perl 脚本如何调用和执行并后处理它

Perl处理Fasta序列的又一实例

Perl - 需要在上一行完成之前继续下一行

如何制作一个批处理脚本来创建指定数量的具有随机名称和指定扩展名的文件? [复制]