Batch file 运行x5.bat文件,暂停,然后运行next5,依此类推

Batch file 运行x5.bat文件,暂停,然后运行next5,依此类推,batch-file,cmd,directory,pause,Batch File,Cmd,Directory,Pause,背景:操作系统:win10。单个根文件夹:“U:\11Web\gallery dl” 在根目录中,我有1400多个子文件夹(这些子文件夹下没有子文件夹(而且永远不会有)。(根目录中也没有单独的/无关的文件(并且永远不会) 每个子文件夹都有自己的.bat文件aGallery-dl.bat @echo off setlocal EnableExtensions DisableDelayedExpansion pushd "%~dp0" || exit /B move /Y "Folder2.jpg"

背景:操作系统:win10。单个根文件夹:“U:\11Web\gallery dl”

在根目录中,我有1400多个子文件夹(这些子文件夹下没有子文件夹(而且永远不会有)。(根目录中也没有单独的/无关的文件(并且永远不会)

每个子文件夹都有自己的.bat文件aGallery-dl.bat

@echo off
setlocal EnableExtensions DisableDelayedExpansion
pushd "%~dp0" || exit /B
move /Y "Folder2.jpg" "Folder.jpg"
for %%I in (.) do set "FOLDER=%%~nxI"
"%ProgramFiles(x86)%\gallery-dl\gallery-dl.exe" -d "U:\11Web\gallery-dl" --download-archive "%~dp0zzzGDB.sqlite3" "https://www.deviantart.com/%FOLDER%/gallery/all"
if not errorlevel 1 if exist "zzzGDB.sqlite3" del "Folder.jpg"
popd
endlocal
我通常手动运行aGallery-dl.bat;打开下一个文件夹,双击运行;下一个文件夹运行,等等,直到我在5到10个cmd窗口之间运行。等他们全部完成后,我可能会再看5-10个文件夹,就这样。在执行每个aGallery-dl.bat时,会下载请求的文件,完成后,会对Folder.jpg进行一些清理,并关闭每个cmd窗口

问题:希望稍微自动化一下这些功能的运行。希望根文件夹中的单个批处理文件在运行时

  • 创建/更新所有子文件夹的list.txt/database文件。一个列表可以在这里工作,一些简单的东西,比如dir/l>list.txt,但是不知道如何保持计数

  • 在列表的前5个子文件夹中运行aGallery-dl.bat,暂停15分钟(超时?),循环,然后点击下5个文件夹,依此类推,直到1400+完成。。。如果我必须重新启动,或者一周后回来重新运行同一批处理文件,它会从第一个文件夹重新开始…每个文件夹中都有一个.sqlite3数据库文件,其中保留了以前下载的所有文件信息。每次从第一个文件夹开始将是一项功能,只下载那些已更新的文件

  • 我没有起始代码/示例,因为我无法充分理解它以真正开始


    提前谢谢。

    有时候它就在我面前。。。一次只能使用一个文件夹,但可以使用。1400多个文件夹之后,我应该很好。。。谢谢你的帮助Stephan

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    for /D %%I in ("G:\tmp\*") do ("%%I\zzzGallery-dl.bat"
    endlocal
    
    更新:希望它能同时运行其中的5-10个。坐在这里看着它一次在一个文件夹里做这些,即使是在第一次运行之后,也需要几天才能完成1400+的更新


    任何能在这方面提供帮助的人都会非常感激。

    有时候这就在我面前。。。一次只能使用一个文件夹,但可以使用。1400多个文件夹之后,我应该很好。。。谢谢你的帮助Stephan

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    for /D %%I in ("G:\tmp\*") do ("%%I\zzzGallery-dl.bat"
    endlocal
    
    更新:希望它能同时运行其中的5-10个。坐在这里看着它一次在一个文件夹里做这些,即使是在第一次运行之后,也需要几天才能完成1400+的更新


    任何能够在这方面提供帮助的人都将不胜感激。

    以下批处理文件可用于并行运行多达五个
    aGallery dl.bat

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    for /D %%I in ("U:\11Web\gallery-dl\*") do if exist "%%I\aGallery-dl.bat" (
        start "Gallery Download %%~nxI" /MIN %ComSpec% /c "%%I\aGallery-dl.bat"
        call :CheckDownloads
    )
    goto :EOF
    
    :CheckDownloads
    %SystemRoot%\System32\timeout.exe /T 1 >nul
    for /F "delims=" %%J in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq cmd.exe" /NH /V ^| %SystemRoot%\System32\find.exe /C "Gallery Download "') do if %%J GEQ 5 goto CheckDownloads
    goto :EOF
    
    子例程
    CheckDownloads
    在启动一个与正在处理此批处理文件以执行
    aGallery dl.bat
    且窗口标题为
    Gallery Download
    并附加文件夹名的命令进程并行的最小化窗口后调用

    子例程在后台运行另一个命令进程之前等待一秒钟,以运行TASKLIST以获取正在运行的
    cmd.exe
    进程列表,该进程通过FIND进行筛选,仅用于窗口标题中具有
    库下载
    的那些命令进程

    FIND只输出带有搜索字符串的行数,该字符串是当前正在运行以进行库下载的命令进程数。如果此数字等于(大于或等于)5,则子例程将在再次执行此下载任务检查之前再次等待一秒钟

    稍作修改的版本为:

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    for /D %%I in ("U:\11Web\gallery-dl\*") do if exist "%%I\aGallery-dl.bat" if exist "%%I\Folder.jpg" (
        start "Gallery Download %%~nxI" /MIN %ComSpec% /c "%%I\aGallery-dl.bat"
        call :CheckDownloads
    )
    goto :EOF
    
    :CheckDownloads
    %SystemRoot%\System32\timeout.exe /T 1 >nul
    for /F "delims=" %%J in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq cmd.exe" /NH /V ^| %SystemRoot%\System32\find.exe /C "Gallery Download "') do if %%J GEQ 5 goto CheckDownloads
    goto :EOF
    
    此外,还将检查子文件夹中是否存在文件
    文件夹.jpg
    ,以忽略所有在其上进行库下载的子文件夹,这样子文件夹中就不再存在文件
    文件夹.jpg

    超时值可以从
    1
    增加到
    5
    10
    30
    秒,以减少检查下载任务的CPU使用

    不应该有太多的画廊下载并行启动,因为这可能会适得其反取决于CPU核心和下载带宽

    在这里发布的批处理文件已经完成,直到最近四次gallery下载仍在并行运行

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    for /D %%I in ("U:\11Web\gallery-dl\*") do if exist "%%I\aGallery-dl.bat" (
        start "Gallery Download %%~nxI" /MIN %ComSpec% /c "%%I\aGallery-dl.bat"
        call :CheckDownloads
    )
    goto :EOF
    
    :CheckDownloads
    %SystemRoot%\System32\timeout.exe /T 1 >nul
    for /F "delims=" %%J in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq cmd.exe" /NH /V ^| %SystemRoot%\System32\find.exe /C "Gallery Download "') do if %%J GEQ 5 goto CheckDownloads
    goto :EOF
    
    要了解所使用的命令及其工作方式,请打开一个窗口,在其中执行以下命令,并非常仔细地阅读为每个命令显示的所有帮助页面

    • 呼叫/?
    • echo/?
    • 查找/?
    • 获取/?
    • goto/?
    • 如果/?
    • setlocal/?
    • start/?
    • 任务列表/?
    • 超时/?

      • 以下批处理文件可用于运行多达五个
        aGallery dl.bat
        并行

        @echo off
        setlocal EnableExtensions DisableDelayedExpansion
        for /D %%I in ("U:\11Web\gallery-dl\*") do if exist "%%I\aGallery-dl.bat" (
            start "Gallery Download %%~nxI" /MIN %ComSpec% /c "%%I\aGallery-dl.bat"
            call :CheckDownloads
        )
        goto :EOF
        
        :CheckDownloads
        %SystemRoot%\System32\timeout.exe /T 1 >nul
        for /F "delims=" %%J in ('%SystemRoot%\System32\tasklist.exe /FI "IMAGENAME eq cmd.exe" /NH /V ^| %SystemRoot%\System32\find.exe /C "Gallery Download "') do if %%J GEQ 5 goto CheckDownloads
        goto :EOF
        
        子例程
        CheckDownloads
        在启动一个与正在处理此批处理文件以执行
        aGallery dl.bat
        且窗口标题为
        Gallery Download
        并附加文件夹名的命令进程并行的最小化窗口后调用

        子例程在后台运行另一个命令进程之前等待一秒钟,以运行TASKLIST以获取正在运行的
        cmd.exe
        进程列表,该进程通过FIND进行筛选,仅用于窗口标题中具有
        库下载
        的那些命令进程

        FIND只输出带有搜索字符串(即num)的行数