如何按特定顺序打印文件名

时间:2014-09-17 06:01:56

标签: perl vba command-prompt

我按名称顺序将文件放在一个位置,当我尝试使用命令promt打印文件名时,按其他顺序打印

下面是这个命令使用的promt代码打印名称

'dir / b,

输入文件

RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml
RU29_SECTION_00001.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SECTION_Preamble.xml

输出我

RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml
RU29_SECTION_00001.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_Preamble.xml

输出我需要

RU29_SECTION_Preamble.xml
RU29_SECTION_00001.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml

感谢提前

2 个答案:

答案 0 :(得分:0)

使用Sort::Key::Natural按自然顺序对列表进行排序。

use strict;
use warnings;

use Sort::Key::Natural qw(natsort);

print natsort <DATA>;

__DATA__
RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml
RU29_SECTION_00001.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_Preamble.xml

输出:

RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml
RU29_SECTION_00001.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SECTION_Preamble.xml

答案 1 :(得分:0)

对字符串中的第一个,第二个和第三个数字进行排序(如果未找到,则第二个和第三个为零)

print my @arr = 
map { $_->[0] }
sort {
  $a->[1] <=> $b->[1] ||
  $a->[2] <=> $b->[2] ||
  $a->[3] <=> $b->[3]
}
map {
  my ($f, @r) = /\d+/g;
  unshift @r, (0) x (2-@r);
  [ $_, $f, @r ];
}
<DATA>;

__DATA__
RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml
RU29_SECTION_00001.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SECTION_Preamble.xml

输出

RU29_SECTION_Preamble.xml
RU29_SECTION_00001.xml
RU29_SECTION_00002.xml
RU29_SECTION_00003.xml
RU29_SECTION_00004.xml
RU29_SECTION_00005.xml
RU29_SECTION_00006.xml
RU29_SECTION_00007.xml
RU29_SECTION_00008.xml
RU29_SECTION_00009.xml
RU29_SECTION_000010.xml
RU29_SECTION_000011.xml
RU29_SECTION_000012.xml
RU29_SECTION_000013.xml
RU29_SECTION_000014.xml
RU29_SCHEDULE_1_00001.xml
RU29_SCHEDULE_2_00002.xml