说我有一个像这样的文件系统:
Directory 1
--dataset
Directory 2
--dataset
Directory 3
--dataset
process.bat
copier.bat <-- RUNS
copier.bat将process.bat复制到一个目录中并运行它:
Directory 1
--dataset
--process.bat <-- RUNS
Directory 2
--dataset
Directory 3
--dataset
process.bat
copier.bat
Process.bat需要几分钟,完成后,copier.bat将process.bat复制到下一个目录并运行它:
Directory 1
--dataset
--process.bat
Directory 2
--dataset
--process.bat <-- RUNS
Directory 3
--dataset
process.bat
copier.bat
在下一个目录中运行process.bat时,将添加具有另一个数据集的新目录:
Directory 1
--dataset
--process.bat
Directory 2
--dataset
--process.bat <-- RUNNING
Directory 3
--dataset
Directory 4
--dataset
process.bat
copier.bat
我需要copier.bat来识别在process.bat运行时添加了目录4,因此它将继续复制到目录4中并运行process.bat。
这就是copier.bat现在的样子,因为它只会复制到第一次运行copier.bat时出现的目录中。
for /D %%i in (*) do (
cd %%i
copy ..\process.bat process.bat
call process.bat
cd ..
)
代码源:https://peterfalkingham.com/2018/04/01/colmap-openmvs-scripts-updated
答案 0 :(得分:1)
@echo off
setlocal
:main
call :myCopier
if not errorlevel 1 goto :main
exit /b 0
:myCopier
setlocal
set "batfile=process.bat"
set "exitcode=1"
for /D %%A in (*) do (
if not exist "%%~A\%batfile%" pushd "%%~A" && (
set "exitcode=0"
copy "..\%batfile%" "%batfile%" && call "%batfile%"
popd
)
)
exit /b %exitcode%
尽管您正在代码中复制copier.bat
复制process.bat
在您的目录结构清单中。
我认为后者在逻辑上是正确的。
此代码将在:myCopier
中调用标签:main
循环直到%errorlevel%
不为0。
它将执行Directory 1
,Directory 2
和Directory 3
1日call :myCopier
。返回的%errorlevel%
为0,因此
再做一次call :myCopier
。这次Directory 4
是
处理。返回的%errorlevel%
为0,因此它执行了另一个
call :myCopier
。所有目录将具有process.bat
内,因此返回的%errorlevel%
为1。这允许
:main
循环的结尾。
使用其他脚本。也许您应该插入一个
setlocal
来保持本地环境不变。
还要在路径周围插入双引号,以便空格
或特殊字符不会引起问题。