首页 > 系统相关 >Windows系统批处理脚本.bat文件

Windows系统批处理脚本.bat文件

时间:2023-08-07 15:46:05浏览次数:37  
标签:bat Windows runas echo 批处理 管理员 cd

windows 批处理文件bat中当前目录

方法1:命令   %cd%  或者  !cd!  ,取得是运行的环境目录

方法2:命令  %~dp0   ,取得了bat的文件所在目录

@ECHO OFF会关闭注释输出;@ECHO ON则打开注释输出。

建议尽量使用下面两种符号来为.bat批处理文件添加注释:

(1):: 注释

(2)% 注释 %,注意:为了避免错误,%和注释之间要留有空格。

1. 添加一行注释

REM, @REM和::的异同:

:: 不输出注释内容
REM 输出注释内容
@REM 不输出注释内容

View Code

 

 

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
View Code

2、bat脚本获取管理员权限

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

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文件的顶端就可以实现。
View Code

3、bat脚本中以管理员权限执行命令

在bat脚本文件第一行加上下面命令:

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

仅提权,将上方代码块内容复制到bat开头即可

④符号

&:顺序执行多条命令,无论上一句命令是否执行成功

&&:顺序执行多条命令,当没有正常执行上一句命令后停止

||: 顺序执行多条命令,只有上一句命令执行错误/未执行时继续

%n:参数,%0为脚本本身

https://learn.microsoft.com/zh-cn/archive/blogs/zainala/using-0-inside-the-batch-file-to-get-the-file-info

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
View Code

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 已获取管理员权限
View Code

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" )
View Code

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
理论上是没问题,但启动路径有时不可靠,之后可能还要pushdcd /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 后面跟想要执行的批处理
View Code

将这种方法的原理是:会先执行一个命令,该命令需要管理员权限,如果没有管理员权限就会返回错误码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

标签:bat,Windows,runas,echo,批处理,管理员,cd
From: https://www.cnblogs.com/love201314/p/17611606.html

相关文章

  • 从MybatisPlus回归Mybatis
    从MybatisPlus回归Mybatis之前写项目一直习惯使用MyBatisPlus,单表查询很方便;两张表也很方便,直接业务层处理两张表的逻辑。但什么都图方便只会害了你。但连接的表比较复杂的时候,还是要使用MyBatis写SQL,这对于一个Plus选手,无疑是遇到了一些障碍的。SQL的一些问题分页的问题......
  • 使用python,利用公网服务器时间更新windows本地时间
    有时候,我们会发现无法连接windows的时间服务器或者内网的时间服务器本身的时间不准。于是,可以通过如下python脚本示例,从公网任意服务器获取其服务器时间,这样更新的时间较为准确。#-*-coding:utf-8-*-importdatetimeimportsubprocessimportrequestsimporttimedefset_......
  • Windows server 2003怎么安装iisWindows server 2003安装IIS教程
    Windows2008系统服务器安装IIS之前已经分享过了,和Windows2003完全不同,今天我将详细地和你分享Windowsserver2003卸载和安装IIS的步骤方法,希望可以帮助到你~1、首先进入服务器,确定下服务器是否有安装IIS,有安装IIS,需要重装的,可以先将IIS卸载。2、卸载比安装更简单些,点击开始——......
  • Springboot-Mybatis(idea)-自学笔记
    Spring-boot-Mybaties快速入门使用Mybatis查询所有用户数据准备工作(创建springboot工程,数据库表格user,实体类User)引入Mybatis的相关依赖,配置Mybatis(数据库连接信息)编写SQL语句(注解/XML)单元测试packagecom.example;importcom.example.mapper.UserMapper;impo......
  • 【mybatis】传参异常:Parameter ‘xxx‘ not found. Available parameters are [xxx,xx
    造成该异常可能的原因有:1、多个传参没有用@Param注解,或者注解导入的包有误。2、#{xxx}填写错误;3、#{xxx}遗漏,特别是有些写在select里的;4、写在bean类里,后面新需求增加变量的,没有加上bean的前缀:"bean.xxx";5、在xml文件里不需要的变量,特别是包含了#{}的,使用不正确的注释方式注......
  • 复习笔记|第十四章 Windows操作系统模型《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.Windows采用什么样的体系结构?从图中看出,系统划分为两种状态,核心态和用户态。粗线上方代表用户态进程,下方是核心态的操作系统服务。用户态的进程只能运行在受保护的地址空间。因此,四种类型的用户态进......
  • 复习笔记|第十五章 Windows进程和线程管理《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.管理进程和线程的数据结构:执行体进程块EPROCESS、执行体线程块ETHREAD、内核进程块KPROCESS、内核线程块KTHREAD。structEPROCESS{P285KPROCESSPCB;内核进程块ObjectTable;进程的句......
  • 复习笔记|第十六章 Windows存储器管理《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.两种数据结构:虚拟地址描述符VAD、区域对象,这两种结构各有什么作用?◆P304◼Windows系统采用一棵由虚拟地址描述符(VAD)构成的平衡二叉树来管理进程私有地址空间。一个进程的一组VAD结构构成一棵自平衡二......
  • 复习笔记|第十七章 Windows文件系统《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.Windows所支持的文件系统类型有哪些?❖支持FAT12、FAT16和FAT32文件系统。12、16和32分别为描述磁盘块簇地址使用的位数。NTFS.sys,使用64位的簇编号。❖现在主要使用NTFS(支持最大文件256TB)和FAT64(最大......
  • 一次关于mybatis的bug解决
    bug表现: 网上的一些映射的对应关系我这边都排除了,实际的是创建级联文件夹时候要逐个去创建:比如com.xx.xx.xx,不能一次性创建,不然idea会把这个识别成一个文件夹,而不是级联的文件夹,编译的时候,mapper类和对应的mapper.xml就不会编译到一起,会报找不到的错误,判断方式:右键该文件夹—......