Windows系统批处理脚本.bat文件
windows 批处理文件bat中当前目录
方法1:命令 %cd% 或者 !cd! ,取得是运行的环境目录
方法2:命令 %~dp0 ,取得了bat的文件所在目录
@ECHO OFF会关闭注释输出;@ECHO ON则打开注释输出。
建议尽量使用下面两种符号来为.bat批处理文件添加注释:
(1):: 注释
(2)% 注释 %,注意:为了避免错误,%和注释之间要留有空格。
1. 添加一行注释
REM, @REM和::的异同:
:: 不输出注释内容
REM 输出注释内容
@REM 不输出注释内容
2. 行尾添加注释
如何在命令后面添加注释?
错误示范:
echo hello :: this is comment 1
echo hello REM this is comment 2
echo hello @REM this is comment 3
正确示范:
echo hello & :: this is comment 4
echo hello & REM this is comment 5
echo hello & @REM this is comment 6
3. 行间添加注释
其实,% 注释 %放在任何地方都可以。注意:为了避免错误,%和注释之间要留有空格。
echo hello % this is a comment % world
% this is a comment %
echo hello world
% cd %
4. 添加多行注释
注意:@GOTO :STEP1中冒号后面的“STEP1”是标签名,可以随便取。不过建议全部使用大写字母。
@GOTO :STEP1
This is comment 1-1
This is comment 1-2.
:STEP1
echo hello
@GOTO :STEP2
This is comment 2-1.
This is comment 2-2.
:STEP2
echo world
echo hello world
5. 总结
建议尽量使用下面两种符号来为.bat批处理文件添加注释:
(1):: 注释
(2)% 注释 %,注意:为了避免错误,%和注释之间要留有空格。
让bat批处理以管理员权限运行的实现方法
在日常运维工作中,为方便对windows用户进行系统安装或配置等,使用Windows自带的批处理(bat文件)是一种最为简单快速的方法。
但是,批处理脚本不会默认已管理员身份运行,一般情况下,我会将脚本命名为"XXXXXX(请右键点击,用管理员身份运行!).bat",但总有些用户会忽略这条提示,直接运行,此时由于权限不足,导致脚本运行失败。我们可以使用一种变通的方法,让bat启动时,首先调用vbs脚本,通过vbs脚本,以管理员身份调用该bat的 runas 部分
我们的脚本可以写在runas 下,这样就点击该bat脚本,就可以已管理员身份运行了
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
2、bat脚本获取管理员权限
@echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d "%~dp0"
cd /d %~dp0及其用途
在WINDOWS下命令CD / D%〜DP0是什么意思 有人可以帮我理解命令cd /d %~dp0及其用途。 再次dos命令如下 cd /d %~dp0 请帮我弄清楚它的含义。 我们来剖析一下。 有三个部分: cd – 这是更改目录命令。 /d – 这个开关让cd改变驱动器和目录。 没有它,你将不得不做cd %~d0 & cd %~p0 。 %~dp0 – 这可以进一步分为三个部分: %0 – 这表示批处理脚本的第零个参数。 它扩展到batch file本身的名称。 %~0 – 在那里解开扩展参数的双引号( " )。 %dp0 – d和p有扩展的修饰符。 d强制添加一个驱动器号并添加完整path。 〜dp0:d =驱动器,p =path,%0 =此batch file的起始目录cd /d %~dp0会将path更改为相同的位置,batch file所在的位置 见for /? 更多细节 写在bat文件的顶端就可以实现。
3、bat脚本中以管理员权限执行命令
在bat脚本文件第一行加上下面命令:
%1 mshta vbscript:CreateObject(“Shell.Application”).ShellExecute(“cmd.exe”,"/c %~s0 ::","",“runas”,1)(window.close)&&exit
仅提权,将上方代码块内容复制到bat开头即可
④符号
&:顺序执行多条命令,无论上一句命令是否执行成功
&&:顺序执行多条命令,当没有正常执行上一句命令后停止
||: 顺序执行多条命令,只有上一句命令执行错误/未执行时继续
%n:参数,%0为脚本本身
1>nul:不显示命令运行的正确提示
2>nul:不显示错误提示
>:重定向
nul:空设备
@: 命令行回显屏蔽符
|:命令管道符,将命令结果作为参数
冒号:字符串截取、标签
双冒号:作为注释使用
4、自动以管理员身份运行批处理(bat)文件
@ECHO OFF setlocal EnableDelayedExpansion color 3e title 添加服务配置 PUSHD %~DP0 & cd /d "%~dp0" %1 %2 mshta vbscript:createobject("shell.application").shellexecute("%~s0","goto :runas","","runas",1)(window.close)&goto :eof :runas ::填写自己的脚本 echo 执行完毕,任意键退出 pause >nul exit
5、以管理员权限执行bat脚本
只需要在你编写的.bat文件的开头加上以下脚本,然后双击.bat文件即是以管理员权限执行
@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、如何让BAT和CMD批处理以管理员身份运行
如何让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、命令行CMD批处理自动以管理员身份运行的正确方法
修正了路径有空格时的问题
在批处理开头加上:
适用于无参数
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit
适用于一参数
%2 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c "^&chr(34)^&"%~0"^&chr(34)^&" "^&chr(34)^&"%~1"^&chr(34)^&" ::","%cd%","runas",1)(window.close)&&exit
更多参数的以此类推
运行批处理时多加一个参数::,这句就不会执行
为了兼容8.3短路径,可把%~0
等换成%~s0
等
理论上是没问题,但启动路径有时不可靠,之后可能还要pushd
或cd /d
8、bat文件以管理员权限运行的几种方式
1、创建bat快捷方式,然后右键快捷方式-->properties-->advanced-->Run as administrator。
2、下载bat转成exe工具,将bat转成exe,然后右键exe-->properties-->Compatibility-->Run as administrator。
3、以管理员权限运行cmd,然后dos框中运行相应的bat。
9、BAT批处理提权
给BAT批处理提权,基本都是借助VBS脚本提权
@echo off >nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" if '%errorlevel%' EQU '5' ( 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" ) pushd "%CD%" CD /D "%~dp0" rem 后面跟想要执行的批处理
将这种方法的原理是:会先执行一个命令,该命令需要管理员权限,如果没有管理员权限就会返回错误码5,然后在系统的Temp文件创建一个VBS脚本,在VBS脚本里用ShellExecute方法以runas的方式开一个进程,runas开的进程会以管理员权限运行。开的那个进程会再执行这个批处理,此时因为有权限,会返回0,然后删除VBS文件,执行自己写的那部分脚本。
会出现的问题:如果需要从外界传参数给该bat批处理,需要在下面这个位置传,但是传过去的参数需要遵守VBS里的语法和ShellExecute的参数格式。如果出现了空格会十分麻烦。
echo
UAC.ShellExecute
"%~s0"
,
"这里输入参数"
,
""
,
"runas"
, 1 >>
"%temp%\getadmin.vbs"
转:https://www.jb51.net/article/193692.htm?login=from_csdn