如何将变量从一个批次传递到另一个
问题描述:
我有一个bat脚本,我试图捕获其中每个功能的处理时间。我还有两个蝙蝠脚本捕捉开始时间和结束时间,但是当我尝试将这些变量传回主脚本时,它不起作用。请指教如何将变量从一个批次传递到另一个
TRIGGER.bat
if exist "inProcess.lok". (
exit
) else (
if EXIST "some.ZIP". (
call startTime.bat
set /a startDel=%1
::some Process
call endTime.bat
set /a endDel=%2
set /a timeDel= (%endDel% - %startDel%)
set /a timeDels= %timeDel%/100
set timeDel=%timeDels%.%timeDel:~-2%
echo %timeDel%
echo %timeDel%
echo %timeDel%
pause
))
startTime.BAT
set starttime=%TIME%
set startcsec=%STARTTIME:~9,2%
set startsecs=%STARTTIME:~6,2%
set startmins=%STARTTIME:~3,2%
set starthour=%STARTTIME:~0,2%
set /a starttime=(%starthour%*60*60*100)+(%startmins%*60*100)+(%startsecs%*100)+(%startcsec%)
:trigger.bat %starttime%
endTime.Bat
set endtime=%time%
set endcsec=%endTIME:~9,2%
set endsecs=%endTIME:~6,2%
set endmins=%endTIME:~3,2%
set endhour=%endTIME:~0,2%
if %endhour% LSS %starthour% set /a endhour+=24
set /a endtime=(%endhour%*60*60*100)+(%endmins%*60*100)+(%endsecs%*100)+(%endcsec%)
:trigger.bat %endtime%
答
您以随机方式使用call
,标签和参数。这是行不通的。
这里是它如何能正常工作(不带参数,只是使用的变量,像乔伊在评论建议)
Trigger.bat一个非常简单的例子:
set starttime=dummy
set endtime=dummy
call starttime.bat
call endtime.bat
echo %starttime% %endtime%
starttime.bat:
set starttime=hello
endtime.bat:
set endtime=world
批处理文件执行所有的同样的过程。您可以在同一进程中使用前面批处理文件设置的变量。如果你通过命令行参数传递值,那么它们没有名字,而是一个数字。 – Joey
需要注意的是,我正在使用传递的变量作为数字 set/a endDel =%2 set/a startDel =%1 但由于某些原因脚本不接受这些值。 – EddieT
您需要调用'delayedexpansion' [数百个关于它的SO-aricles - 使用搜索功能],以便显示在括号内的一系列指令(又名“代码块”)内更改的任何变量的运行时值。你为什么不在'endtime.bat'中做计算和显示,你可以在那里提供参数来显示结束的过程的名字? – Magoo