【问题标题】:Batch script: Search if a folder contains any files批处理脚本:搜索文件夹是否包含任何文件
【发布时间】:2011-04-24 17:53:48
【问题描述】:

我正在尝试获取一个批处理脚本来检查文件夹中是否包含任何文件。到目前为止,这是我已经走了多远:

IF EXIST %FILEPATH%\%%i\FromGlobus\%FILE% (

%WINZIP% %FILEPATH%\GlobusEOD\ExtraFiles\%ZIPFILE% -m %FILE%
IF errorlevel 1 goto subBADEND

)

其中%FILE% 是*.*,但发生的情况是即使文件不存在,它也会尝试压缩文件并因此失败!

有什么建议或想法吗?

谢谢

【问题讨论】:

  • 所有解决方案似乎都需要运行dir。这样做的问题是,如果目标文件夹包含很多文件/子目录,可能需要一段时间。

标签: search file batch-file directory


【解决方案1】:

在修改了我自己的脚本之后

@Belisarius' 答案的一个变体是我一直在使用的……经过一段时间的修改,@NimeCloud's 版本似乎无法在我的 XP 机器上运行……

我想出了两种似乎可以满足我需求的混合方法:

%FOLDER%=C:\Temp
FOR /F %%i in ('dir /b "%FOLDER%\*.*"') DO ( goto :Process )
goto :Exit

:Process
...
...
...

:Exit
exit

【讨论】:

    【解决方案2】:

    你可以使用类似的东西

    set VAR=init
    for /f %%a in ('dir /b c:\kk\*.*') do set VAR=exists
    if %VAR%==exists ...
    

    在大型目录的情况下效率不高,但它可以工作。

    HTH!

    【讨论】:

    • 我在批处理文件中使用过它...取决于@NimeCloud 答案是否有效,这确实有效。我认为尼姆更“优雅”。
    • 无需遍历所有结果,您可以在第一个结果之后使用如下标签跳出循环:stackoverflow.com/questions/13601015/…
    【解决方案3】:

    dir . 返回 . ..也许这些虚拟目录会造成混乱。您可以尝试如下所示的 FIND 管道:

    SET filter=*.*
    SET notfound="File not found"
    
    DIR %filter% | FIND %notfound% 
    @If ErrorLevel 1 Goto :end
    

    【讨论】:

    • 我喜欢这个答案...比@Belisarius 回答 IMO 更容易理解。
    • 如果有一个名为“File not found”的文件,这个脚本会失败:)
    • *.* 也失败了,因为 dir *.* 总是为所有目录返回一些东西,包括空目录,它返回 . 和 ..(它不返回任何 /b开关,但这仍然不起作用,因为这个脚本正在寻找仍然没有返回的 File not found 错误)。
    【解决方案4】:

    如果您使用/A:-D 为dir 命令,那么如果目录有文件,它将切换返回码。仅适用于文件(/A:D 不适用于子目录)

    dir /A:-D /B "mydir" >nul 2>nul && echo.mydir having files

    【讨论】:

      【解决方案5】:

      您可以将find 与dir 结合使用,以确保在找不到文件时返回代码与您期望的一致:

      DIR /A /B | >NUL FIND /V "" && ECHO Folder contains files || ECHO Folder empty
      

      【讨论】:

        猜你喜欢
        • 2022-11-28
        • 2010-11-29
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多