【bat】bat命令实践

【1】变量使用,获取当前年月日

net use Z: \192.168.135.1share_linux a123456! /user:chaoqun.guo
set bath=c:backup
set today=%date:~0,4%%date:~5,2%%date:~8,2%
::%date:~0,4%,表示从第0下标开始获取4位长度的值
set db_name=test
set filename=%db_name%%today%


path="C:Program FilesWinRAR"
winRAR a %bath%%filename%.rar %bath%%filename%.bak 

copy %bath%%filename%.rar \192.168.135.1share_linux /Y

net use \192.168.135.1share_linux /delete

【2】DOS/sql server下使用net use

Rem dos

net use Z: \192.168.135.1share_linux a123456! /user:chaoqun.guo
net use \192.168.135.1share_linux /delete

Rem sql server

EXEC sp_configure 'show advanced options',1;
RECONFIGURE WITH OVERRIDE;
EXEC sp_configure 'xp_cmdshell',1;
RECONFIGURE WITH OVERRIDE
EXEC master.dbo.xp_cmdshell 'net use x: \219.129.239.217master_1_temp "AO%7Ro*AD35@bTa" /user:"7RoAdmin"' 

【3】如何写注释?Rem

Rem  注释内容

【4】快速把 bat 安装成定时任务

/*
--ddt_db_backup_install.bat

@echo off
color 2
echo.
echo ----------------- ddt_db_backup_install  --------------------
echo ----------------- ddt_db_backup_install -------------------- > install.log 
echo.

schtasks /delete /TN ddt_db_backup /F
schtasks /delete /TN ddt_db_bakcup /F
schtasks /create /ru SYSTEM /tn "ddt_db_backup" /tr "C:shellddt_db_bakcup.bat" /sc daily /st 06:10:00 /F

IF ERRORLEVEL 1 (ECHO Error: ddt_db_backup install error
ECHO Error: ddt_db_backup install error >> install.log 2>&1
goto error)
echo OK
echo OK >> install.log 2>&1

:ok
echo.
echo ------------------- Install Success ---------------------
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
goto end

:error
echo.
echo.
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
ping -n 2 127.1>nul
exit 1

:end
exit


*/

/*
--ddt_db_backup.bat
--add the code for delete override files

if exist F:Db_Tank_Back (set data_path=F:Db_Tank_Back) else if exist E:Db_Tank_Back (set data_path=E:Db_Tank_Back) else (if exist D:Db_Tank_Back (set data_path=D:Db_Tank_Back) )
forfiles /p %data_path% /s /m *.7z /d -7 /c "cmd /c del @path"

*/

【5】不换行打印输出

set /p="测试引擎服务是否启动......"<nul 

【6】上一条命令执行成功与否 errorlevel

1为失败,0为成功

echo 开始重命名数据库/创建数据库......
set /p="开始重命名数据库/创建数据库......"<nul >>%logfile%
sqlcmd -S 127.0.0.1,1433 -i 1_DB_renameAndCreate.sql -E -b 2>>%errorfile% 1>db_log_%today%.log
IF ERRORLEVEL 1 echo fail......请检查db_log_%today%.log 文件>>%logfile%
IF ERRORLEVEL 0 echo ok>>%logfile%

ERRORLEVEL  与 %ERRORLEVEL % 的区别

IF ERRORLEVEL 1 ( command )    与  IF %ERRORLEVEL%  LEQ 1 ( command  )  等效

也就是 ERRORLEVEL 1 等效于 “大于等于”

环境变量的比较符号可以使用的有:
        ● EQU - 等于
        ● NEQ - 不等于
        ● LSS - 小于
        ● LEQ - 小于或等于
        ● GTR - 大于
        ● GEQ - 大于或等于

【7】如何复制文件到一个文件夹下,重复则跳过?replace

官网:https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/replace

使用replace,可以完成这个功能。

  形式:replace /a source_dir* des_dir

  举例:replace /a d: emp_bak* d:copy_file

source_dir:为源文件夹

des_dir:为目标文件夹

【8】bat中的for,执行指定次数

1)执行6次循环
如果只要循环6次的话

  for /l %%i in (1,1,6) do就可以了。

(2)处理文本
要循环处理文本文件的话

  for /f %%i in (a.txt) do

3)在循环中运行多个命令 for %%i in (resource1 ^ resource2 ^ resource3 ^ resource4) ^ do ( echo %%i XCOPY /Y /S /q %%i %OFFICE_DIR% )

【9】bat中使用timeout来做等待

TIMEOUT [/T] timeout [/NOBREAK]

描述:

这个工具接受超时参数,等候一段指定的时间(秒)或等按任意键。它还接受一个参数,忽视按键。

参数列表:

/T timeout 指定等候的秒数。有效范围从 -199999 秒。

/NOBREAK 忽略按键并等待指定的时间。

/? 显示此帮助消息。

注意: 超时值 -1 表示无限期地等待按键。
原文地址:https://www.cnblogs.com/gered/p/13180548.html