我有一个文件夹,里面有几千个以特定方式命名的 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
我不想复制每个 pdf 文件,只想复制每个文件中升序数字最高的文件。
我发现这个代码的呕吐 - Chunky Mess 风格
FOR /F "USEBACKQ TOKENS=*" %F IN ("C:\Folder\FileList.txt") DO XCOPY /F /Y "C:\SourceFolder\%~F" "C:\DestinationFolder\"
我该如何编辑此行代码以每次获取最高的升序数字?
答案1
另一个答案是不需要批处理或代码,您可以在 Syncback 和 Gs Richcopy 等工具中使用可行的功能,这些功能支持通配符来包含/排除文件,请尝试联系他们进行免费试用
答案2
试试这个批处理文件。将以下代码复制到记事本,然后根据需要编辑此部分:
:: Set the location of the file list here:
set List=c:\files.txt
:: Set the location of the source files here:
set Source=c:\Source
:: Set the location of the desired destination here:
set Destiny=c:\Destiny
然后使用您想要的名称保存文件,但扩展名为 *.bat,然后双击它。
@echo off
:: Set the location of the file list here:
set List=c:\files.txt
:: Set the location of the source files here:
set Source=c:\Source
:: Set the location of the desired destination here:
set Destiny=c:\Destiny
if not exist "%List%" echo Error: The file list doesn't seem to exist& pause& exit
if not exist "%Source%" echo Error: The Source folder doesn't seem to exist& pause& exit
if not exist "%Destiny%" md "%Destiny%"
set NameA=
set NameB=
for /f "delims=" %%a in ('type "%List%" ^|find /i "-" ^|sort /r') do call :CopyL "%%~a"
pause
exit
:CopyL
for /f "tokens=1* delims=-" %%a in ("%~1") do (
if not "%NameA%"=="%%a" copy "%Source%\%~1" "%Destiny%\"
set NameA=%%a
set NameB=%%b
)
goto :EOF
正如您在我的测试环境中看到的,它仅复制编号最高的组的文件,而忽略名称中没有连字符的文件(纽约):
答案3
- 从您的文件列表...
循环列出您的文件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%\"
- 无文件列表
按名称的相反顺序列出您的文件/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%"
其他资源: