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 存在路径

posted @ 2025-03-06 00:26  黄晓明演技担当  阅读(36)  评论(0)    收藏  举报