运行 x5 .bat 文件,暂停,然后 运行 下一个 5 等等
Run x5 .bat file, pause, then run next 5 and so on
背景: OS: win10.单个根文件夹:"U:Web\gallery-dl".
在根目录中,我有 1400 多个子文件夹(这些文件夹下面没有子文件夹(而且永远不会))。 (根目录中也没有 individual/extraneous 个文件(而且永远不会))。
每个子文件夹都有自己的.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:Web\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 windows 之间。稍后当它们全部完成时,我可能会再浏览 5-10 个文件夹,然后就这样了。随着每个 aGallery-dl.bat 的执行,请求的文件被下载,完成后,一些清理工作在 Folder.jpg 上完成,每个 cmd window 关闭。
问题: 希望稍微自动化这些 运行ning。想要根文件夹中的单个批处理文件,当 运行 时
Create/update 所有子文件夹的列表。txt/database 文件。一个列表可以在这里工作,像 dir/l>list.txt 这样简单的东西但是不知道如何保持计数?
运行 aGallery-dl.bat 在列表的前 5 个子文件夹中,暂停 15 分钟(超时?),循环然后点击接下来的 5 个文件夹,依此类推,直到 1400+ 完成...如果我必须重新启动,或者一周后回来并且必须重新 运行 同一个批处理文件,那没关系再次从第一个文件夹开始...每个文件夹中都有一个 .sqlite3 数据库文件,其中保留了所有先前下载的文件信息。每次都从第一个文件夹开始是一个功能,只下载那些已更新的文件。
我没有开始 code/example 因为我无法充分考虑它以真正开始。
提前致谢。
有时它就在我面前...一次处理一个文件夹,但确实有效。 1400+文件夹以后我应该好了...谢谢你的帮助Stephan!!
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("G:\tmp\*") do ("%%I\zzzGallery-dl.bat"
endlocal
更新:希望它能同时 运行 5-10 个。坐在这里看着它一次在一个文件夹中连续执行这些操作,即使在第一个 运行-thru 之后,即使只是更新也需要几天时间才能完成 1400+。
任何能够在这方面提供帮助的人都会非常感激。
以下批处理文件可用于 运行 最多五个 aGallery-dl.bat
并行。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("U:Web\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
在启动另一个命令进程后被调用 运行 一个最小化的 window 并行于正在处理此批处理文件以执行 [=12] 的命令进程=] window 标题为 Gallery Download
并附加文件夹名称。
子例程等待一秒钟,然后 运行 在后台执行另一个命令进程 运行 TASKLIST 以获取 运行ning cmd.exe
使用 FIND 过滤的进程,仅针对那些在 window 标题中具有 Gallery Download
的命令进程。
FIND 只输出搜索到的字符串的行数,即当前要执行图库下载的命令进程数 运行。如果此数字(大于或)等于 5,则子例程在再次执行此下载任务检查之前再次等待一秒钟。
稍作修改的版本为:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("U:Web\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
另外检查文件 Folder.jpg
是否存在于子文件夹中,以忽略过去已经下载过一次图库的所有子文件夹,因此文件 Folder.jpg
不存在在子文件夹中。
超时值可以从 1
增加到 5
或 10
或 30
秒以减少 CPU 检查下载任务的使用.
不应同时启动太多图库下载,因为这可能会适得其反,具体取决于 CPU 核心和下载带宽。
此处发布的批处理文件已经完成,最多最后四个图库下载仍在 运行ning 并行。
要了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
call /?
echo /?
find /?
for /?
goto /?
if /?
setlocal /?
start /?
tasklist /?
timeout /?
我稍微调整了我的链接代码以适应您的环境。 (未经测试,所以使用副本或备份)
@ECHO off
setlocal
set bunch=10
for /D %%I in ("G:\tmp\*") do (
call :loop
echo processing: %%a
start "MyCommand" cmd /c "%%I\zzzGallery-dl.bat"
)
call :loop
goto :eof
:loop REM waits for available slot
for /f %%x in ('tasklist /fi "windowtitle eq MyCommand" ^| find /c "cmd.exe"') do set x=%%x
if %x% geq %bunch% goto :loop
goto :eof
%bunch%
是 运行 并行的线程数。您必须进行一些实验才能获得最佳数量。这取决于每个线程产生的负载量和您计算机的规格。
背景: OS: win10.单个根文件夹:"U:Web\gallery-dl".
在根目录中,我有 1400 多个子文件夹(这些文件夹下面没有子文件夹(而且永远不会))。 (根目录中也没有 individual/extraneous 个文件(而且永远不会))。
每个子文件夹都有自己的.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:Web\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 windows 之间。稍后当它们全部完成时,我可能会再浏览 5-10 个文件夹,然后就这样了。随着每个 aGallery-dl.bat 的执行,请求的文件被下载,完成后,一些清理工作在 Folder.jpg 上完成,每个 cmd window 关闭。
问题: 希望稍微自动化这些 运行ning。想要根文件夹中的单个批处理文件,当 运行 时
Create/update 所有子文件夹的列表。txt/database 文件。一个列表可以在这里工作,像 dir/l>list.txt 这样简单的东西但是不知道如何保持计数?
运行 aGallery-dl.bat 在列表的前 5 个子文件夹中,暂停 15 分钟(超时?),循环然后点击接下来的 5 个文件夹,依此类推,直到 1400+ 完成...如果我必须重新启动,或者一周后回来并且必须重新 运行 同一个批处理文件,那没关系再次从第一个文件夹开始...每个文件夹中都有一个 .sqlite3 数据库文件,其中保留了所有先前下载的文件信息。每次都从第一个文件夹开始是一个功能,只下载那些已更新的文件。
我没有开始 code/example 因为我无法充分考虑它以真正开始。
提前致谢。
有时它就在我面前...一次处理一个文件夹,但确实有效。 1400+文件夹以后我应该好了...谢谢你的帮助Stephan!!
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("G:\tmp\*") do ("%%I\zzzGallery-dl.bat"
endlocal
更新:希望它能同时 运行 5-10 个。坐在这里看着它一次在一个文件夹中连续执行这些操作,即使在第一个 运行-thru 之后,即使只是更新也需要几天时间才能完成 1400+。
任何能够在这方面提供帮助的人都会非常感激。
以下批处理文件可用于 运行 最多五个 aGallery-dl.bat
并行。
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("U:Web\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
在启动另一个命令进程后被调用 运行 一个最小化的 window 并行于正在处理此批处理文件以执行 [=12] 的命令进程=] window 标题为 Gallery Download
并附加文件夹名称。
子例程等待一秒钟,然后 运行 在后台执行另一个命令进程 运行 TASKLIST 以获取 运行ning cmd.exe
使用 FIND 过滤的进程,仅针对那些在 window 标题中具有 Gallery Download
的命令进程。
FIND 只输出搜索到的字符串的行数,即当前要执行图库下载的命令进程数 运行。如果此数字(大于或)等于 5,则子例程在再次执行此下载任务检查之前再次等待一秒钟。
稍作修改的版本为:
@echo off
setlocal EnableExtensions DisableDelayedExpansion
for /D %%I in ("U:Web\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
另外检查文件 Folder.jpg
是否存在于子文件夹中,以忽略过去已经下载过一次图库的所有子文件夹,因此文件 Folder.jpg
不存在在子文件夹中。
超时值可以从 1
增加到 5
或 10
或 30
秒以减少 CPU 检查下载任务的使用.
不应同时启动太多图库下载,因为这可能会适得其反,具体取决于 CPU 核心和下载带宽。
此处发布的批处理文件已经完成,最多最后四个图库下载仍在 运行ning 并行。
要了解使用的命令及其工作原理,请打开 command prompt window,在其中执行以下命令,并仔细阅读为每个命令显示的所有帮助页面。
call /?
echo /?
find /?
for /?
goto /?
if /?
setlocal /?
start /?
tasklist /?
timeout /?
我稍微调整了我的链接代码以适应您的环境。 (未经测试,所以使用副本或备份)
@ECHO off
setlocal
set bunch=10
for /D %%I in ("G:\tmp\*") do (
call :loop
echo processing: %%a
start "MyCommand" cmd /c "%%I\zzzGallery-dl.bat"
)
call :loop
goto :eof
:loop REM waits for available slot
for /f %%x in ('tasklist /fi "windowtitle eq MyCommand" ^| find /c "cmd.exe"') do set x=%%x
if %x% geq %bunch% goto :loop
goto :eof
%bunch%
是 运行 并行的线程数。您必须进行一些实验才能获得最佳数量。这取决于每个线程产生的负载量和您计算机的规格。