【问题标题】:Windows Batch - Find all pdf's in sub directories, exclude specific foldernamesWindows Batch - 查找子目录中的所有 pdf,排除特定文件夹名称
【发布时间】:2015-03-27 23:48:30
【问题描述】:

上下文

我目前正在使用批处理文件进行编程,以使用仅适用于 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(不包括原件)

:: Example.bat
@echo off

set myDirectory=C:\New folder
:: Search through myDirectory to find all .pdf files (including subdirectories)

setlocal enableDelayedExpansion
for /R "%myDirectory%" %%G in (*.pdf) do (
    set inputDirectory=%%~dpG
    echo G              = !%%G!
    echo inputDirectory = !inputDirectory!

    for /f "delims=\" %%F in ("!inputDirectory!") do (
        set currentFolder=%%~nxF
        echo currentFolder = !currentFolder!
    )

    if NOT "!currentFolder!"=="Originals" (
        set /a count=count+1
    )
)
echo There are %count% PDF's (excluding originals)
pause

请运行示例批处理文件来演示我目前所拥有的。任何帮助或解决方案将不胜感激。

干杯!

已解决

这是我根据大家的解决方案想出的!

@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

再次感谢大家!

【问题讨论】:

    标签: batch-file for-loop cmd nested


    【解决方案1】:

    另一个类似的方法是:

    @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
    

    *更改为适当的路径名

    【讨论】:

      【解决方案2】:

      %%~pG%%G 扩展为仅路径包括尾随\ 反斜杠。不需要的,按如下方式清除:

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

      【讨论】:

        【解决方案3】:

        试试这个:

        @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 的努力,但不幸的是我无法让它正常工作,这个例子给了我错误的文件数。不过方法很有趣。
        猜你喜欢
        • 2021-12-23
        • 2012-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-20
        相关资源
        最近更新 更多