情况如下: 我有一个包含许多带pdf文件的子文件夹的文件夹。我想创建一个遍历每个子文件夹的批处理脚本,并压缩pdf文件,如果有超过100个(使用7Zip,而不是寻求该部分的帮助)。
这是我第一次处理Windows批处理脚本,我非常沮丧。我在谷歌上花了几个小时,我觉得我对这个问题没什么好看的。我已经找到了很多参考资料和示例代码,但没有在示例中逐字逐句细分。我发现语法非常不友好。
无论如何,这就是我所拥有的:
@echo off
for /r %%A in (.) do (
set pdfCount = "Code that gets the total number of pdf files in current directory, something like dir *.pdf?"
if pdfCount GEQ 100 (
set beginDate = "Code that gets the date of the oldest pdf, use in the zip file name"
set endDate = "Code that gets the date of the newest pdf, use in the zip file name"
"Use a 7Zip command to zip the files, I am not asking for help with this code"
DEL *.pdf
echo %pdfcount% files zipped in "Code for current directory"
)
)
pause
我的理解是“for / r %% A in(。)do()”应该执行每个子目录中的代码。
答案 0 :(得分:0)
这可能有用。它不具有破坏性,而且只是将7zip和参数与屏幕相呼应。
@echo off
for /f "delims=" %%a in ('dir /b /ad /s') do (
pushd "%%a"
for /f %%b in ('dir *.pdf /b ^|find /c /v "" ') do (
if %%b GTR 100 echo 7zip a "%%~nxa.7z" "*.pdf"
)
popd
)
它占用当前目录树中的所有文件夹,推送堆栈中的目录使其成为当前目录,使用dir并查找计算PDF文件,如果结果大于100,它将回显该行到安慰。并且popd再次将目录从堆栈中弹出。 7z文件将在包含PDF文件的文件夹中创建,除非您为其指定位置,否则它们将获得folders name.7z
。
答案 1 :(得分:0)
此脚本依赖于区域设置,这意味着它取决于计算机上日期和时间的格式。我的机器使用mm/dd/yyyy hh:mm am
格式。该脚本将创建名称格式为PDF yyyy_mm_dd yyyy_mm_dd.7z
。
@echo off
setlocal disableDelayedExpansion
for /r /d %%P in (*) do (
set "beg="
set /a cnt=0
pushd "%%P"
for /f "eol=: delims=" %%F in ('dir /b /a-d /od *.pdf 2^>nul') do (
set /a cnt+=1
set "end=%%~tF"
if not defined beg set "beg=%%~tF"
)
setlocal enableDelayedExpansion
if !cnt! gtr 100 (
for /f "tokens=1-6 delims=/ " %%A in ("!beg:~0,10! !end!") do (
7zip a "PDF %%C_%%A_%%B %%F_%%D_%%E.7z" *.pdf
del *.pdf
)
)
endlocal
popd
)