Batch file 运行x5.bat文件,暂停,然后运行next5,依此类推
背景:操作系统:win10。单个根文件夹:“U:\11Web\gallery dl” 在根目录中,我有1400多个子文件夹(这些子文件夹下没有子文件夹(而且永远不会有)。(根目录中也没有单独的/无关的文件(并且永远不会) 每个子文件夹都有自己的.bat文件aGallery-dl.batBatch 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"
@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窗口
问题:希望稍微自动化一下这些功能的运行。希望根文件夹中的单个批处理文件在运行时
提前谢谢。有时候它就在我面前。。。一次只能使用一个文件夹,但可以使用。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)的行数