bat批处理文件技巧
输出当前时间,然后用一个for /F循环来解析时间。时间的格式通常是小时:分钟:秒.百分秒,这里用delims=:.,分割成四个部分。然后通过计算将时间转换为毫秒或某种整数形式,可能用于后续的时间差计算,比如计算构建耗时。
tokens 表示选中的字符串 1-4,表示一道4个字符串 如果是1,2*表示 1,2部分和后面所有
echo %time%
0:59:06.95
echo Get the build start time
echo The build start time is: %time%
echo.
for /F "tokens=1-4 delims=:.," %%a in ("%time%") do (
set /A "start=(((%%a*60)+1%%b %% 100)*60+1%%c %% 100)*100+1%%d %% 100"
)
查询Windows注册表来获取Visual Studio的版本信息及其安装路径
这里使用了reg query命令来查询注册表项HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7。这个注册表路径通常存储了Visual Studio各个版本的安装路径,尤其是64位系统上的32位应用程序信息。Wow6432Node是64位Windows用于兼容32位程序的部分,所以这里可能是为了兼容不同架构的VS安装。
for /F命令的选项"tokens=1,2*"表示将每行输出分解为三个部分:第一个标记(%%i)、第二个标记(%%j)和剩余部分(%%k)。但注意到在循环体内,用户使用了%%i和%%k,而忽略了%%j。这可能是因为注册表查询的输出格式中,每个条目由三部分组成:键名、类型和值。例如,查询结果可能类似于:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7
15.0 REG_SZ C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\
16.0 REG_SZ C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\
在这种情况下,第一列是版本号(如15.0),第二列是类型(REG_SZ),第三列是安装路径。因此,使用tokens=1,2*时,%%i对应版本号,%%j对应类型,%%k对应路径。但循环体中只使用了%%i和%%k,即版本和路径,忽略了类型(%%j),这是合理的,因为类型在此处不需要。
set VSVERSION=
set VSCOMMONTOOLS=
for /F "tokens=1,2*" %%i in ('reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\SxS\VS7"') do (
set VSVERSION=%%i
set VSCOMMONTOOLS=%%k
)
获取超过9个以上的参数
set p01=%1
set p02=%2
set p03=%3
set p04=%4
set p05=%5
set p06=%6
set p07=%7
set p08=%8
set p09=%9
shift&shift&shift&shift&shift&shift&shift&shift&shift
set p10=%1
set p11=%2
set p12=%3
set p13=%4
set p14=%5
set p15=%6
set p16=%7
set p17=%8
set p18=%9
内置变量
%time% //当前时间
%CD% //当前路径
转义字符
echo %%p01 //输出为%p01
set MAKEBAT=%CD%\..\Make\Make.bat
//设置一个叫MAKEBAT的变量
set MAKEPARAMS=%p01% %p02% %p03% %p04% %p05% %p06% %p07% %p08% %p09% %p10% %p11%
//设置一个叫MAKEPARAMS的变量 %p01% 是叫p01的变量
逻辑比较
if "%p03%" NEQ "WIN_VC" (
goto callmake
)
rem 如果 "%p03%" 不等于 "WIN_VC"
if "%VSVERSION%" lss "15.0" (
set VCVARSBAT="%VSCOMMONTOOLS%VC\bin\amd64\vcvars64.bat"
) else (
set VCVARSBAT="%VSCOMMONTOOLS%VC\Auxiliary\Build\vcvars64.bat"
)
lss 小于
if exist %VCVARSBAT% (
echo.
echo calling %VCVARSBAT%
call %VCVARSBAT%
) else (
echo.
echo VSCOMMONTOOLS can not be found
)
if exist 存在路径

浙公网安备 33010602011771号