windows脚本

lishihuan大约 3 分钟

windows脚本

image-20240418092055935
image-20240418092055935

.bat 如何需要输出中文,则需要设置字符集 windws/GB2312

常用的命令

以下是一些常用的 Windows 批处理命令的简要介绍:

  1. echo:用于在命令行中显示文本或变量的值。 示例:echo Hello, World!

  2. set:用于设置和显示环境变量的值。 示例:

    set dbname=mydatabase
    set backupdir=D:\backup
    
  3. if:用于执行条件语句,根据条件的结果执行不同的操作。 示例:

    if %var%==value (
        rem 条件为真时执行的命令
    ) else (
        rem 条件为假时执行的命令
    )
    
  4. for:用于创建循环结构,对一组文件或文本进行迭代处理。 示例:

    for %%variable in (list) do (
        rem 执行的命令,可使用 %%variable 引用当前迭代的项
    )
    
  5. goto:用于跳转到批处理脚本中的指定标签位置。 示例:

    goto label
    
    :label
    rem 标签位置的命令
    
  6. call:用于调用另一个批处理脚本,并在完成后返回。 示例:call other_script.bat

  7. pause:用于暂停脚本的执行,等待用户按下任意键后继续。 示例:pause

  8. mkdir:用于创建目录或文件夹。 示例:mkdir directory_name

  9. xcopy:用于复制文件和目录。 示例:xcopy source_path destination_path /E /C /I /Q /Y

  10. del:用于删除文件。 示例:del file_name

  11. rename:用于重命名文件或文件夹。 示例:rename old_name new_name

  12. copy:用于复制文件。 示例:copy source_file destination_file

  13. move:用于移动文件或文件夹到指定位置。 示例:move source_file destination_folder

  14. rem:用于注释

注释 :@echo off 关闭了命令回显

常用用法

变量的使用

使用 %包裹着

rem 例如:
set name=lihuan
set backup_date = "%date%"
echo "%name%"
rem 使用变量,并且进行拼接
set backupfile=%name%_expdp_%backup_date%.text

日期和时间

目前主机时间格式存在差别,如果想创建 yyyyMMddHHmmss 这样格式的文件名,则需要先查询 日期格式

C:\Users\cyinl>echo "%date%"
"2023/06/20 周一"

C:\Users\lihuan>echo "%date%"
"周三 2024/03/20"
rem 针对主机日期格式为   2024/03/20 周三 
set backup_date=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
rem 针对主机日期格式为  周三 2024/03/20 
set backup_date=%Date:~3,4%%Date:~8,2%%Date:~11,2%%Time:~3,2%%Time:~6,2%

最优处理,同时处理了时间出现空格的情况

rem 构造日期时间格式作为文件名组成部分 例如:2024032292315
if "%date:~0,1%"=="周" (
    set "formatted_datetime=%date:~3,4%%date:~8,2%%date:~11,2%%time:~0,2%%time:~3,2%%time:~6,2%"
) else (
    set "formatted_datetime=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%"
)
rem 替换时间 0-10 直接 会出现空格的场景
set "datetime=%formatted_datetime: =%"
echo %datetime%

删除过期文件

默认是删除当前文件夹下的 或者 指定 /p . 来代表当前目录

set dbname=sdt_yjwz
set dir=D:\files
rem 删除过期文件,这里是超过 7 天就删除 -- 
FORFILES /P .  /M %dbname%*.dmp /D -7 /C "cmd /c echo %time% deleting..@file.. &del @file"
rem 删除 D:\files 目录下的 匹配 sdt_yjwz*.dmp 文件
forfiles /p %dir%\ /m %dbname%*.dmp /d -15 /c "cmd /c del @file /f"
rem 删除当前目录下的 过期文件,这里是超过15天就删除
forfiles /m %dbname%*.dmp /d -15 /c "cmd /c del @file /f"

压缩文件

WinRAR 命令,是主机安装了WinRAR并且配置了环境变量才 直接用

-ep1:该参数只包括文件,而不包含文件夹路径

@echo off
rem 设置备份文件的路径
set backupfile=%dir%\%dbname%_%backup_date%.sql
rem 设置最终的数据库备份文件的压缩文件路径
set backupfileRar=%dir%\%dbname%_%backup_date%.rar
echo 当前文件夹路径:%cd%
rem 使用mysqldump对指定的MySql进行备份
%exec_dir% -h%host% -P%port% -u%user% -p%pass% -c --add-drop-table %dbname% > %backupfile%

rem 使用WinRAR压缩文件
WinRAR a -ep1 %backupfileRar% %backupfile%