0x00 前言
lib_base.bat分析学习是在init.bat的基础上进行调用的。
其他相关分析文章
cmder Cmder.bat分析学习
DIY自己的cmder.exe
cmder init.bat分析学习
为了更清晰的标识,使用新的注释方法。
0x01 正文
1. 1~10行
@echo off
set lib_base=call "%~dp0lib_base.cmd"
if "%~1" == "/h" (
%lib_base% help "%~0"
) else if "%1" neq "" (
call :%*
)
这里的call需要进行举例说明:
脚本链接
@echo off
echo %*
exit /b
:a
echo a
:b
echo b
2. help部分
for /f "tokens=* delims=:" %%a in ('type "%~1" ^| %WINDIR%\System32\findstr /i /r "^:::"') do (
rem echo a="%%a"
if "%%a"=="." (
echo.
) else if /i "%%a" == "usage" (
echo %%a:
) else if /i "%%a" == "options" (
echo %%a:
) else if not "%%a" == "" (
echo %%a
)
)
pause
exit /b
3.cmder_shell
echo %comspec% | %WINDIR%\System32\find /i "\cmd.exe" > nul && set "CMDER_SHELL=cmd"
echo %comspec% | %WINDIR%\System32\find /i "\tcc.exe" > nul && set "CMDER_SHELL=tcc"
echo %comspec% | %WINDIR%\System32\find /i "\tccle" > nul && set "CMDER_SHELL=tccle"
if not defined CMDER_CLINK (
set CMDER_CLINK=1
if "%CMDER_SHELL%" equ "tcc" set CMDER_CLINK=0
if "%CMDER_SHELL%" equ "tccle" set CMDER_CLINK=0
)
if not defined CMDER_ALIASES (
set CMDER_ALIASES=1
if "%CMDER_SHELL%" equ "tcc" set CMDER_ALIASES=0
if "%CMDER_SHELL%" equ "tccle" set CMDER_ALIASES=0
)
exit /b
这个部分其实就是进行了一个初始化:
CMDER_SHELL,CMDER_SHELL以及CMDER_ALIASES的初始化
4.update_legacy_aliases
set "user_aliases=D:\VStart\tools\tools\cmder_cs\config\a.cmd"
:: 这里其实就是判断文件存在不的意思
type "%user_aliases%" | %WINDIR%\System32\findstr /i ";= Add aliases below here" >nul
:: 如果不存在errorlevel==1
if "%errorlevel%" == "1" (
:: 打印
echo Creating initial user_aliases store in "%user_aliases%"...
:: 判断CMDER_USER_CONFIG是否存在
if defined CMDER_USER_CONFIG (
:: 备份当前的 aliases,且将user_aliases.cmd.default复制为新的aliases
copy "%user_aliases%" "%user_aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
) else (
copy "%user_aliases%" "%user_aliases%.old_format"
copy "%CMDER_ROOT%\vendor\user_aliases.cmd.default" "%user_aliases%"
)
)
exit /b
这个update_legacy_aliases强制检测user_aliases有没有;=要是没有就要去复制了。相当于这个脚本是在为user_aliases.cmd进行服务的。
0x02 后记
感觉这里提前call的这一下,相当于python在提前进行一个import一样,只不过是变量的控制域的掌控问题罢了。