Batch file Windows批处理-查找所有pdf';在子目录中,排除特定的文件夹名

Batch file Windows批处理-查找所有pdf';在子目录中,排除特定的文件夹名,batch-file,for-loop,cmd,nested,Batch File,For Loop,Cmd,Nested,上下文 我目前正在使用批处理文件编程,以使用仅适用于cmd的特定pdf工具 问题 我试图运行一个for循环,它递归地在一个目录中循环查找所有*.pdf文件。不包括名为“Originals”的pdf内部文件夹 如果pdf文件位于名为“Originals”的父文件夹中,则必须跳过它。否则,使用%counter%变量计算pdf文件 目录结构示例 C:\New folder\file (1).pdf C:\New folder\file (2).pdf C:\New folder\Sub_1\file

上下文

我目前正在使用批处理文件编程,以使用仅适用于cmd的特定pdf工具

问题

我试图运行一个for循环,它递归地在一个目录中循环查找所有*.pdf文件。不包括名为“Originals”的pdf内部文件夹

如果pdf文件位于名为“Originals”的父文件夹中,则必须跳过它。否则,使用%counter%变量计算pdf文件

目录结构示例

C:\New folder\file (1).pdf
C:\New folder\file (2).pdf

C:\New folder\Sub_1\file (1).pdf
C:\New folder\Sub_1\file (2).pdf
C:\New folder\Sub_1\file (3).pdf

C:\New folder\Sub_2\file (4).pdf
C:\New folder\Sub_2\file (5).pdf

C:\New folder\Originals\file (1).pdf
C:\New folder\Originals\file (2).pdf
示例批处理文件-查找所有pdf(不包括原件)

请运行示例批处理文件来演示我到目前为止所做的工作。任何帮助或解决方案都将不胜感激

干杯

已解决

以下是我根据每个人的解决方案得出的结论

@echo off
setlocal enabledelayedexpansion

set count=0
set myDirectory=C:\New folder

for /r "%myDirectory%" %%i in (*.pdf) do (
    set inputDirectory=%%~dpi
    set inputDirectoryNoSlash=!inputDirectory:~0,-1!
    for %%j in (!inputDirectoryNoSlash!) do set sub=%%~nxj
    if NOT !sub!==Originals (
        set /a count=count+1
    )
)

echo There are %count% PDF's (excluding originals)
pause

再次感谢各位

%%~pG
%%G
展开到仅包含尾随
\
反斜杠的路径。不需要的,请按如下方式清除它:

for /f "tokens=* delims=\" %%F in ("!inputDirectory:~0,-1!") do (
    set currentFolder=%%~nxF
    echo currentFolder = !currentFolder!
)

%%~pG
%%G
展开到仅包含尾部
\
反斜杠的路径。不需要的,请按如下方式清除它:

for /f "tokens=* delims=\" %%F in ("!inputDirectory:~0,-1!") do (
    set currentFolder=%%~nxF
    echo currentFolder = !currentFolder!
)

另一种类似的方法是:

@echo off
setlocal enabledelayedexpansion

set count=0
set dir=C:\TEST
echo %count%

for /r "%dir%" %%i in (*.pdf) do (
    set dirx=%%~dpi
    set con=!dirx:~0,-1!
    for %%j in (!con!) do set sub=%%~nxj
    if !sub!==Originals (
    cls
    ) else (
    set /a count=count+1
    )
    )
echo !count!
pause

*更改为适当的路径名另一种类似的方法是:

@echo off
setlocal enabledelayedexpansion

set count=0
set dir=C:\TEST
echo %count%

for /r "%dir%" %%i in (*.pdf) do (
    set dirx=%%~dpi
    set con=!dirx:~0,-1!
    for %%j in (!con!) do set sub=%%~nxj
    if !sub!==Originals (
    cls
    ) else (
    set /a count=count+1
    )
    )
echo !count!
pause
*更改为相应的路径名

尝试以下操作:

@echo off
setlocal EnableDelayedExpansion

set myDirectory=C:\New folder
set count=0
for /F "delims=" %%a in ('dir /S "%myDirectory%\*.pdf" ^| findstr /V /L "\Originals\"') do (
   echo File: %%a
   set /A count+=1
)
echo There are %count% PDF's (excluding originals)
pause
试试这个:

@echo off
setlocal EnableDelayedExpansion

set myDirectory=C:\New folder
set count=0
for /F "delims=" %%a in ('dir /S "%myDirectory%\*.pdf" ^| findstr /V /L "\Originals\"') do (
   echo File: %%a
   set /A count+=1
)
echo There are %count% PDF's (excluding originals)
pause

感谢Aacini的努力,但不幸的是,我无法让它正常工作,该示例给出了错误的文件计数。虽然这个方法很有趣。谢谢Aacini的努力,但不幸的是我不能让它正常工作,这个例子给了我错误的文件计数。不过这个方法很有趣。