99-bat grammar

@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 %~1
goto :eof

:EchoRed
echo %~1
goto :eof

 

posted @ 2025-09-07 16:56  乐观的知觉  阅读(10)  评论(0)    收藏  举报