从列表中复制具有特定名称和升序编号的文件

Sti*_*ire 5 windows command-line batch-file

我有一个文件夹,其中包含数千个以某种方式命名的 pdf 文件,以及我想要复制到另一个文件夹的文件列表。

- "abcd0000000001-00.pdf"
- "abcd0000000001-01.pdf"
- "abcd0000000001-02.pdf"  // copy abcd0000000001-02.pdf
- "abcd0000000002-00.pdf"
- "abcd0000000002-01.pdf"
- "abcd0000000002-02.pdf"
- "abcd0000000002-03.pdf"  // copy abcd0000000002-03.pdf
- "abcd0000000003-00.pdf"
- "abcd0000000003-01.pdf"
- "abcd0000000004-00.pdf"
- "abcd0000000004-01.pdf"  
- "abcd0000000004-02.pdf"
- "abcd0000000004-03.pdf"
- "abcd0000000004-04.pdf"  // copy abcd0000000004-04.pdf
- ...
- "abcd000000000n-nn.pdf" //  copy abcd000000000n-[highest].pdf
Run Code Online (Sandbox Code Playgroud)

我不想复制每个 pdf 文件,只想复制每个文件中升序编号最高的文件。

我找到了Vomit IT - Chunky Mess Style的这段代码

FOR /F "USEBACKQ TOKENS=*" %F IN ("C:\Folder\FileList.txt") DO XCOPY /F /Y "C:\SourceFolder\%~F" "C:\DestinationFolder\"
Run Code Online (Sandbox Code Playgroud)

如何编辑这行代码以每次获得最高的升序数?

It *_* Me 0

  • 从您的文件列表中...

在循环中列出您的文件For /F并获取在第一个标记(默认)中返回的字符串 e 并设置-为分隔符,然后按相反顺序按名称过滤您的文件,如果目标文件夹中不存在则复制第一个...

@echo off

cd/d "D:\The\Full\Path\To\Your\.Pdf\Files\Folder"
set "_list=D:\The\Full\Path\To\Your\List\File.txt"
set "_target=D:\The\Full\Path\To\Your\Target\Folder"

for /f "usebackdelims=-" %%a in (`type "%_list%"^|findstr \-[0-9][0-9]\.pdf
   `)do for /f "tokens=*delims=-" %%i in ('dir /o:-n /a:-d /b "%%~a-??.pdf"
       ')do if not exist "%_target%\%%~a-??.pdf" ;copy "%%~fi" "%_target%\"
Run Code Online (Sandbox Code Playgroud)
  • 没有文件列表

按名称以相反的顺序列出文件/o-n,当文件夹中不存在时复制每个文件,假设/替换-NumberNumber分隔符为-??.

@echo off 

cd /d "D:\The\Full\Path\To\Your\.Pdf\Files\Folder"
set "_Target_Dir=D:\The\Full\Path\To\Your\Target\Folder"

for /f tokens^=1*delims^=- %%i in ('dir /o-n /a-d /b *-??.pdf
   ')do if not exist "%_Target_Dir%\%%~i-??.pdf" copy "%%~i-%%~j" "%_Target_Dir%"
Run Code Online (Sandbox Code Playgroud)

其他资源: