我以一个练习题为例,将其作为一个练习来讨论: 合并pdf文件和相关的文件名
在这个问题上,我试图回答部分成功,因为它已经用更多的信息更新了这个问题。
123456_ABCD.pdf 123456_EFGH.pdf 123456_IJKL.pdf 111111_ABCD.pdf 111111_EFGH.pdf 222222_IJKL.pdf 222222_WXYZ.pdf
如何在批处理中显示回显中的所有字符?
如何使用RHS上的cygwin sed使用windows set命令
IF ERRORLEVEL 0检查似乎没有正常工作
Windowsbatch file中的CURL
123456_ABCD.pdf,123456_EFGH.pdf,123456_IJKL.pdf 111111_ABCD.pdf,111111_EFGH.pdf 222222_IJKL.pdf,222222_WXYZ.pdf
这里的每一行都假设代表在命令中find的相同前缀
这是我的尝试:
@echo off ( copy nul 123456_ABCD.pdf copy nul 123456_EFGH.pdf copy nul 123456_IJKL.pdf copy nul 111111_ABCD.pdf copy nul 111111_EFGH.pdf copy nul 222222_IJKL.pdf copy nul 222222_WXYZ.pdf ) setlocal enabledelayedexpansion :: set _pdffiles= set _prevfiles= for /f "delims=" %%i in ('dir /b /ad /o:n "??????_????.pdf"') do ( set "files=%%nxi" if "!files:~0,6!" neq "!_prevfiles:~0,6!" ( set "_prevfiles=%%i" set _pdffiles=!_pdffiles! "%%i" set "_outputpdf=%%~ni" ) else ( set _prevfiles= set _pdffiles= ) echo pdftk.exe !_pdffiles! cat output "!_outputpdf:~0,6!.pdf" )
但是,这给了我输出:
pdftk.exe "111111_ABCD.pdf" cat output "111111.pdf" pdftk.exe "111111_ABCD.pdf" "111111_EFGH.pdf" cat output "111111.pdf" pdftk.exe "111111_ABCD.pdf" "111111_EFGH.pdf" "123456_ABCD.pdf" cat output "123456.pdf" pdftk.exe "111111_ABCD.pdf" "111111_EFGH.pdf" "123456_ABCD.pdf" "123456_EFGH.pdf" cat output "123456.pdf" pdftk.exe "111111_ABCD.pdf" "111111_EFGH.pdf" "123456_ABCD.pdf" "123456_EFGH.pdf" "123456_IJKL.pdf" cat output "123456.pdf" pdftk.exe "111111_ABCD.pdf" "111111_EFGH.pdf" "123456_ABCD.pdf" "123456_EFGH.pdf" "123456_IJKL.pdf" "222222_IJKL.pdf" cat output "222222.pdf" pdftk.exe "111111_ABCD.pdf" "111111_EFGH.pdf" "123456_ABCD.pdf" "123456_EFGH.pdf" "123456_IJKL.pdf" "222222_IJKL.pdf" "222222_WXYZ.pdf" cat output "222222.pdf"
我search了类似的例子,但我还没有find如何避免这种情况。
PS:如果有人可以find一个伟大的标题build议,请:)
在Windows服务器重启后运行批处理脚本
在Windows上closures脚本以删除registry项?
复制文件,而不使用Powershell重新创build子目录
如何在Windowsbatch file中获取Java程序的退出状态
echo off setlocal EnableDelayedExpansion set "list=" for /F "tokens=1,2 delims=_" %%a in ('dir /B *.pdf') do ( if "!last!" neq "%%a" ( if defined list echo pdftk.exe !list:~2! set "list=" set "last=%%a" ) set "list=!list!,%%a_%%b" ) echo pdftk.exe !list:~2!
如果我理解你的话,你只能在一个组的最后执行pdftk.exe 。
编辑:此外,我已经加入~在set files ,否定你的if并区分名称和路径。 现在看起来像你想要的。
set name= set file= set pdfFiles= set prevFile= for /f "delims=" %%i in ('dir /b /s /ad /o:n "??????_????.pdf"') do ( set prevName=!name! set prevFile=!file! set name=%%~nxi set file="%%i" if "!prevName!" == "" set prevName=!name! if "!name:~0,6!" == "!prevName:~0,6!" ( set pdfFiles=!pdfFiles! !file! set _outputpdf=%%~ni ) else ( echo pdftk.exe !pdfFiles! cat output "!_outputpdf:~0,6!.pdf" set pdfFiles=!file! ) ) echo pdftk.exe %pdfFiles% cat output "%_outputpdf:~0,6%.pdf"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。