一个Windows批处理脚本,用于将一个文件夹中每十个文件复制到另一个文件夹

3

我有一个文件夹中有多个文本文件,我想根据这些文件的名称/字母顺序选择每第十个文件(即第10个、20个、30个、40个等文件),并将它们复制到另一个文件夹中。

举例来说:

我有一个文件夹 C:\documents\source\,其中包含以下的文件:

12.txt
16.txt
2007.txt
2008.txt
200865.txt
2008616263.txt
a.txt
across.txt
addition.txt
album.txt
American.txt
an.txt
and.txt
April.txt
article.txt
Artist.txt
at.txt
Award.txt
Awards.txt
Awards64.txt
Bad.txt
Best.txt
breakout.txt
by.txt
Canada.txt
categories.txt
Collaboration59.txt
Dance.txt
Dark.txt
December.txt
Diva.txt
Duo.txt
earned.txt
embarked.txt
Entertainment.txt
entitled.txt
Europe60.txt
Favorite.txt
Female.txt
Fiasco.txt
first.txt
five.txt
for.txt
four.txt
Girl.txt
Glow.txt
Gone.txt
Good.txt
Grammy.txt
Group.txt
he.txt
headlining.txt
her.txt
in.txt
including.txt
Kanye.txt
kicked.txt
Lupe.txt
Margeaux.txt
Monster.txt
MTV.txt
Music.txt
NERD.txt
nominated.txt
nominations.txt
of.txt
off.txt
on.txt
or.txt
other.txt
Performance.txt
PopRock.txt
R&B.txt
RapSung.txt
receiving.txt
Record.txt
Recording.txt
referred.txt
Rihanna.txt
second.txt
September.txt
several.txt
she.txt
shows.txt
Single.txt
Song.txt
SoulR&B.txt
States.txt
success.txt
support.txt
the.txt
then.txt
to.txt
tour.txt
United.txt
Video.txt
was.txt
Watson.txt
Weekly.txt
West.txt
which.txt
winning.txt
with.txt
won.txt
wrote.txt
Year.txt
Year58.txt

我希望将文件album.txt、Awards64.txt、December.txt、Fiasco.txt、Group.txt、Monster.txt、other.txt、second.txt、support.txt和West.txt复制到文件夹C:\documents\output\中。请问如何编写一个批处理文件以实现此目标?
3个回答

5

在遍历文件列表时,只需进行计数:

@echo off
set Counter=0
for %%f in (*.txt) do call :p "%%f"
goto :eof

:p
    set /a Counter+=1
    set /a X=Counter %% 10
    if %X%==0 copy %1 C:\Documents\Output
goto :eof

这应该是可行的,但我无法测试,因为我没有权限写入根目录;-)

要使其适应每八个文件,只需更改set /a X=Counter %% 10中的10

请注意,尽管NTFS输出已排序的文件列表,但这与您从资源管理器(或任何其他尊重区域和语言选项中设置的排序方法)获得的排序不同。


@techdaemon,如果你认为一个答案对你有帮助并解决了你的问题,你可以将其标记为已接受(并点赞)。 - Joey
我把你的答案标记为已接受。但是有一件事情。文件名中带有感叹号的文件被跳过了。应该怎么做才能纠正这个问题? - techdaemon
@techdaemon:你启用了延迟扩展吗?如果是的话,在这里如果不需要的话就不要使用它。 - Joey

1

你能改变文件名吗?一个简单的解决方案是根据输出创建它们的方式,标记每10个文件。然后只需使用通配符和标记复制它们。


我有2000多个文件。标记每第十个文件是一项艰巨的任务。此外,这些文件的数量每天都在增长,我并不总是需要每第十个文件。有时我需要每第八个文件,或者每第十二个、第五个等,这取决于情况。 - techdaemon

-1

增加了一些修改,以从一个文件夹创建几个磁盘: 有些不太规范,但能用:)。每个磁盘的“offs”变量和目标文件夹必须更改。与原始脚本不同

@echo off
set Counter=0
set offs=0
for %%f in (*.mp3) do call :p "%%f"
goto :eof

:p
    set /a c2=Counter-offs
    set /a X=c2 %% 8
    set /a Counter+=1
    if %X%==0 copy %1 d:\avtcd_tgt\cd1
goto :eof

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接