@echo off &TITLE bat语法常用命令
REM 01 获取管理员权限
REM %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
REM 02 设置窗口大小
REM 终端可默认设置为120 45
mode con COLS=132 LINES=70
REM 03 参数检查。检查执行路径,防止误执行脚本
if "%~1" == "" (
echo 未传递任何参数
REM exit /b
)
if not "%cd%" == "Xxx\libs" (
call :EchoRed "脚本当前执行路径:%cd%,请配置执行路径,避免误执行脚本!!!"
pause
exit /b
)
REM 04 切换代码页,操作之后可设置console字体,chcp 936 回车,可以切换回来原来的样子
REM chcp 437
:: & 连接两个命令,当&前的命令执行后,接着执行后面的命令
:: &&连接两个命令,当&&前的命令成功时,才执行&&后的命令
:: ||连接两个命令,当||前的命令失败时,才执行||后的命令
rd "%WinDir%\system32\permission" >NUL 2>NUL
md "%WinDir%\System32\permission" 2>NUL||(echo 请使用右键管理员身份运行!&& pause>nul && exit)
rd "%WinDir%\System32\permission" 2>NUL
echo 当前是管理员运行了
net session >nul 2>&1
if %errorLevel% NEQ 0 (
echo not admin run
) else (
echo admin run
)
REM 05 打印date,time相关字串
for /f %%i in ('date /t') do (set d=%%i)
for /f %%i in ('time /t') do (set t=%%i)
echo %date% %time%
echo %d% %t%
echo %d:~0,4%-%d:~5,2%-%d:~8,2%_%t:~0,2%%t:~3,2%
pushd %cd%
echo do something
popd
REM 06 脚本执行路径和脚本所在路径的区别
echo 脚本执行路径:%cd%
echo 脚本所在路径:%~dp0
REM 07 字符串替换
setlocal enabledelayedexpansion
set "str0= "
set "str1=github.com"
set "str2=gitcode.com/mirrors"
set "str3="
set input=old
echo new: %input%
set input=!input:%str0%=%str3%!
set input=!input:%str1%=%str2%!
echo new: !input!
endlocal
REM 08 遍历输入参数
set argc=0
set /a argc+=1
echo !argc!
setlocal enabledelayedexpansion
for %%x in (%*) do (
if exist %%x (
if exist "%%~x\*" (
echo 正在删除目录 %%x
rd /s/ q %%x
) else (
echo 正在删除文件 %%x
del /f/ q %%x
)
) else (
echo 文件或目录不存在 %%x
)
)
endlocal
REM 09 创建空文件
echo.> xxx1.txt
copy nul xxx2.txt>nul
del xxx1.txt /s /q /f
del xxx2.txt /s /q /f
REM 10 生成目录树
set "directory_tree=tree.txt"
tree "Xxx\脚本" /F> %directory_tree%
REM 11 choice
REM @echo ******************** 执行说明 ********************
REM @echo 1. choice 1
REM @echo 2. choice 2
REM @echo.
REM @echo 说明:(1)xxx
REM @echo (2)xxx
REM @echo.
REM @choice /C 12 /M ">>>>>>>>>>>>>>>10s后开始执行xxx" /d 2 /t 3
REM @if %errorlevel%==1 @goto CONTINUE
REM @if %errorlevel%==2 @goto CONTINUE
REM :CONTINUE
REM 12 弹框
REM msg %username% /time:3 "ok"
REM 13 文件大小超过阈值,备份
REM fileSize=$(stat -c%s "$file_path")
set "file_path=%directory_tree%"
set backup_size=1048576
setlocal enabledelayedexpansion
if not exist %file_path% (
echo 文件 %file_path% 不存在
) else (
echo 文件 %file_path% 存在
REM for /f "delims=" %%a in ('powershell -Command "(Get-Item '%file_path%').length"') do set file_size=%%a
for %%A in ("%file_path%") do set file_size=%%~zA
if !file_size! gtr %backup_size% (
for /f %%i in ('date /t') do (set d=%%i)
for /f %%i in ('time /t') do (set t=%%i)
set "backup_name=%d:~0,4%-%d:~5,2%-%d:~8,2%_%t:~0,2%%t:~3,2%_tree.txt"
copy "%file_path%" "%~dp0!backup_name!"
echo 文件已备份为 %backup_name%
type nul> "%file_path%"
echo 文件 %file_path% 已清空
) else (
echo 文件 %file_path% 小于1MB
)
del %file_path% /s /q /f
)
endlocal
REM 99 延时
timeout /t 3 /nobreak
ping -n 3 127.0.0.1>nul
REM 14
REM goto :eof 是一个特殊的跳转命令,用于立即跳转到脚本的末尾并结束当前脚本的执行,而不会执行之后的任何命令。:eof 是一个预定义的标签,代表“End Of File”(文件末尾)的意思。
REM 无条件跳转:
REM 在脚本的任何地方使用 goto :eof,都会立即跳转到脚本的末尾并结束执行。
REM 在条件判断中使用:
REM 结合 if 语句使用,当满足某个条件时跳转到脚本末尾。
REM 在循环中使用:
REM 在 for 循环或 goto 循环中,当满足特定条件时使用 goto :eof 提前退出循环。
:: 检查某个环境变量是否已设置
if not defined MY_VARIABLE (
echo 环境变量 MY_VARIABLE 未设置,脚本将退出。
ping -n 3 127.0.0.1>nul
goto :eof
)
:: 如果环境变量已设置,则继续执行以下命令
echo 环境变量 MY_VARIABLE 已设置,值为:%MY_VARIABLE%
:: 脚本的其他部分...
:eof
:: 脚本在这里结束,:eof 标签不需要显式定义
echo 这条消息永远不会被显示,因为脚本在 :eof 处结束了。
exit
REM [1m: 粗体
REM [4m: 字体加上下划线
REM [7m: 逆转前景和背景色
REM [8m: 不可见字符
REM [9m: 跨行字体
REM [30m: 灰色字体
REM [31m: 红色字体
REM [32m: 绿色字体
REM [33m: 棕色字体
REM [34m: 蓝色字体
REM [35m: 紫色字体
REM [36m: 浅蓝色字体
REM [37m: 浅灰字体
REM [38m: 黑色字体
REM [40m: 黑色背景
REM [41m: 红色背景
REM [42m: 绿色背景
REM [43m: 棕色背景
REM [44m: 蓝色背景
REM [45m: 紫色背景
REM [46m: 浅蓝色背景
REM [47m: 浅灰色背景
REM
REM echo是通过使用“转义序列”来为世界涂上颜色的。语法格式如下:
REM echo -e " \033[颜色1;颜色2m 要展示的文字 \033[0m "
REM 格式详解:
REM -e选项:表示允许反斜杠(对字符)转义。
REM \033[颜色1;颜色2m:称为转义序列,它本身是一个整体,中间不要有空格。
REM \033[:转义序列的开始。其中\033代表Esc符号,也可以使用\E或\e来代替。
REM 颜色1和颜色2:表示字体的前景色或背景色,至于颜色1和颜色2哪一个表示前景色,哪一个表示背景色,由其设定的数值来决定,前景色和背景色的数值空间是不同的。
REM m:转义序列的终止标志。
REM \033[0m:表示将颜色恢复回原来的配色。
REM
REM 所有涉及的颜色如表所示。
REM 色彩 黑 红 绿 黄 蓝 洋红 青 白
REM 前景色 30 31 32 33 34 35 36 37
REM 背景色 40 41 42 43 44 45 46 47
:EchoGreen
echo [32;40m%~1[0m
goto :eof
:EchoRed
echo [31;40m%~1[0m
goto :eof