windows之BAT脚本记录

一、概述

本文主要记录日常工作中,使用到的BAT脚本问题及使用事项,包含网络中收集整理的相关入门基础资料,以供后期参考。

二、语法

三、脚本

3.1、以管理员权限运行BAT脚本的实现方法

1)示例1:

@ echo off
%1 %2
ver|find "5.">nul&&goto :Admin
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :Admin","","runas",1)(window.close)&goto :eof
:Admin
//在你的bat开头加上上面的命令即可
//下面是你需要执行的命令
set path=%~dp0
echo install mysql service...
echo %path%
cd %path%\bin\
mysqld.exe --remove mysql
mysqld.exe --install mysql
echo start mysql Serviceo
"%SystemRoot%"\system32\net start mysql

说明:mshta.exe是一个hta(HTML Application HOST:HTML应用程序主机,可理解为就是一个html)文件解释器,如同CMD是批处理文件的解释器一样。其中vbscript表使用的协议,也可以javascript;使得mshta程序可以直接执行vbs/js语句而不需要将vbs/js语句放在html文件中;且hta被设计用于本地运行,可以更高的权限打开html文件。
2)示例2:写在需要执行的命令部前面即可

@echo off
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"

3)示例3:

%1 mshta vbscript:CreateObject(“Shell.Application”).ShellExecute(“cmd.exe”,"/c %~s0 ::","",“runas”,1)(window.close)&&exit

4)示例4:bat启动时,首先调用vbs脚本,通过vbs脚本,以管理员身份调用该bat的 runas 部分

@ECHO OFF
setlocal EnableDelayedExpansion
color 3e
title 添加服务配置
    
PUSHD %~DP0 & cd /d "%~dp0"  ::更改当前目录为批处理脚本当前所在的目录,%0代表批处理本身,~dp是变量扩充,d(Drive的缩写)既是扩充到分区号 d: p(Path)就是扩充到脚本所在路径;
%1 %2
mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof
:runas
    
::填写自己的脚本
    
echo 执行完毕,任意键退出
    
pause >nul
exit

说明:相关含义

~0 - 删除任何引号("),扩充 %0;%0指的是当前脚本,而~代表各种扩展;
%~f0 - 将 %0 扩充到一个完全合格的路径名(“f”是file,即文件)
%~d0 - 仅将 %0 扩充到一个驱动器号
%~p0 - 仅将 %0 扩充到一个路径
%~n0 - 仅将 %0 扩充到一个文件名(“n”是name 文件名)
%~x0 - 仅将 %0 扩充到一个文件扩展名
%~s0 - 路径短名,即扩充的路径只含有短名(“s”为Short,短的)
%~a0 - 将 %0 扩充到文件的文件属性(“a”为attribute,即属性)
%~t0 - 将 %0 扩充到文件的日期/时间(“t”time)
%~z0 - 将 %0 扩充到文件的大小(Size 大小)
%~$PATH:0查找列在路径环境变量的目录,并将 %0 扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串
%~dp0 - 仅将 %0 扩充到一个驱动器号和路径
%~nx0 - 仅将 %0 扩充到一个文件名和扩展名
%~fs0 - 仅将 %0 扩充到一个带有短名的完整路径名
%~dp$PATH:0’ - 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个驱动器号和路径。
%~ftza0 - 将 %0 扩充到类似输出线路的 DIR
%0为当前批处理文件,如果0换成1为第一个文件,2为第2个……;%1代表传给脚本的第一个参数,而%~1,也代表第一个参数,只是参数包含引号的时候,将引号去掉;
当前盘符:%~d0
当前路径:%cd%
当前执行命令行:%0
当前bat文件路径:%~dp0
当前bat文件短路径:%~sdp0
set pa=%cd% 将当前路径赋值给pa,等号前后不要有空格 //windows 的快捷方式不能使用相对路径。可以用批处理文件获取相对路径
echo %pa% 显示pa变量 //验证
5)示例5:

@echo off&color 17
if exist "%SystemRoot%\SysWOW64" path %path%;%windir%\SysNative;%SystemRoot%\SysWOW64;%~dp0
bcdedit >nul
if '%errorlevel%' NEQ '0' (goto UACPrompt) else (goto UACAdmin)
:UACPrompt
%1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","::",,"runas",1)(window.close)&exit
exit /B
:UACAdmin
cd /d "%~dp0"
echo 当前运行路径是:%CD%
echo 已获取管理员权限

6)示例6:让BAT和CMD批处理以管理员身份运行

@echo off
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
if '%errorlevel%' NEQ '0' (
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )

7)示例7:CMD批处理自动以管理员身份运行

%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~s0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit

说明:转载于编程客栈

猜你喜欢

转载自blog.csdn.net/ximenjianxue/article/details/123320132
今日推荐