背景
最近这段时间工作中用了一些之前接触很少的Windows命令,所以写一个博客记录一下,有windows的纯bat命令,另外附加一点adb命令。
windows普通bat命令
字符串查找
这个地方是直接借用一个网友的一个方法体,本来我需求是做字符串截取,但是截取之前要先获取索引,这个方法帮了我许多。
:: 下面这一段是一个方法
:getSubIndex
setlocal enabledelayedexpansion
:strLen_Loop
set /A len+=1
set /A len1+=0
set /A num=len-1
::判断传入第二个参数要查找的字符是否已经遍历到了结尾,如果结尾了就说明匹配到了
if not "!%2:~%len1%!"=="" (
::判断第一个传入的字符串是否已经遍历到了结尾
if not "!%1:~%num%!"=="" (
if not "!%2:~%len1%!"=="" (
if "!%1:~%num%,1!"=="!%2:~%len1%,1!" (
set /A len1=len1+1
) else (
set /A len1=0
)
goto :strLen_Loop
) else (
endlocal & set %3=%num%
)
)
) else (
endlocal & set %3=%num%
)
exit /b
字符串截取
从上一节获取到索引之后,开始做截取:目标是截取字符串中的那个绝对路径
@Echo off
::启用命令扩展
setlocal enabledelayedexpansion
::设置获取指定字符串中第一个匹配字符串中最后一位的索引
::例:设置为str2为is,则获取第一个is中s所在的位置,索引从1开始
set str1= REG_SZ C:\Windows\System32\ElevocUAPO.dll
set str2=C:
set str3=.dll
::调用这个方法,传入字符串str1和要查找的字符串str2,str3。indexFirst,indexEnd是它的返回值
call :getSubIndex str1 str2 indexFirst
call :getSubIndex str1 str3 indexEnd
if "%indexFirst%"=="" (
echo "C: not find"
)else (
echo "C: start Index is %indexFirst%"
)
if "%indexEnd%"=="" (
echo "not find"
)else (
echo .dll start Index is %indexEnd%
)
set /a indexFirstInt= %indexFirst%-2
set /a indexEndInt= %indexEnd%+0
echo %indexFirstInt%
echo "!str1:~%indexFirstInt%,%indexEndInt%!"
pause
倒数第二句我要着重讲一下,echo “!str1:~%indexFirstInt%,%indexEndInt%!”,一般来说,bat这种命令中%xxx%就表示引用这个变量(类似jsp的<% xxx %>),我在网上找的字符串截取是这样的:echo %str1:~1,5%,截取1到5,因为外层已经包了一层%%了,所以我直接把变量塞进去,根本不行,然后从网友的方法(getIndex:if not “!%2:~%len1%!”=="" )中发现外面可以包一层!!,然后才得出这个式子,中间还试图把str1也包一下%%,但是那样是不正确的结果,所以是现在的式子。(絮絮叨叨式记录心路历程)
其他简单命令
cd dir 跳转某目录
D:/F: 切换其他盘目录
dir 列出这个目录下的东西(类似linux的ls)
附上我这次的卸载脚本,有删除自身文件夹,删除注册表,删除服务,卸载dll等
防止删除后以后不知道内容,备份以供下次参考
:: require admin
@echo off
net.exe session 1>NUL 2>NUL && (
goto gotAdmin
) || (
goto UACPrompt
)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
:begin
echo==============================================================
echo=
echo start uninstall
echo=
echo==============================================================
set INSTALL_HOME=%cd%
echo %INSTALL_HOME%
echo========================================
echo=
echo stop App: Game Assistance
echo=
echo========================================
taskkill /f /im GameAssistanceIntelStyle.exe
echo========================================
echo=
echo uninstall Service: HandleEndpointService
echo=
echo========================================
net stop HandleEndpointService
sc delete HandleEndpointService
echo========================================
echo=
echo delete regedit(Current Version下还没删除)
echo=
echo========================================
REG DELETE HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Elevoc
echo========================================
echo=
echo delete files this dir
echo=
echo========================================
echo %~dp0
rd/s/q %~dp0
:: delete myself
del %0
:: apo files delete and revert
echo========================================
echo=
echo unregister elevoc dll
echo=
echo========================================
cd /d %~dp0
set b=%cd%
start /wait regsvr32 /u /s %b%\Downlink\ElevocDAPO.dll && regsvr32 /u /s %b%\Uplink\ElevocUAPO.dll
IF ERRORLEVEL 1 (
echo regsvr32 Elevoc error or not exist
) ELSE (
echo regsvr32 Elevoc succeed
)
pause
ADB命令
凭记忆写一些,以防以后忘记
:: 进入linux模式,可以用linux的命令,类似ls,rm之类的
adb shell
::向安卓设备输入,单引号里面的内容
adb shell "input text '' "
:: 按键(具体的键可以百度查找:HOME, POWER,BACK之类的)
adb shell input keyevent KEYCODE_POWER
:: 安卓build的properties
adb shell setprop ennable.xxx.xxx = 0
:: 权限,读写和root
adb root
adb remount
:: 给手机发送文件
adb push F:/sss/xxx.apk /system/app/xxx/
:: 删除手机里文件
adb shell rm /system/app/xxx.apk
:: 安装
adb install xxx.apk
:: 日志控制台以及输出到文件内
adb logcat |findstr "XXXX"
adb logcat -d -s xxxx -V -long *:V>.\\logcat.log
adb logcat >.\\logcat.log
::清除logcat
adb logcat -c
::关机,重启
adb shutdown
adb reboot
Linux命令
这个普通命令没有写的必要,日常中常用的一些其他命令记在了另外一个电脑中,也不多,下次学习之后继续来这里做笔记。