DOS/ bat脚本

版权声明:============================================================================== https://blog.csdn.net/xyc1211/article/details/82655828

过去: DOS系统  bat命令

现在: 假DOS  cmd命令

bat脚本命令整理:

echo		表示显示此命令后的字符 
echo off	表示在此语句后所有运行的命令都不显示命令行本身 
@		与echo off相象,但它是加在每个命令行的最前面,表示运行时不显示这一行的命令行(只能影响当前行)。 
call		调用另一个批处理文件(如果不用call而直接调用别的批处理文件,那么执行完那个批处理文件后将无法返回当前文件并执行当前文件的后续命令)。 
pause		运行此句会暂停批处理的执行并在屏幕上显示Press any key to continue...的提示,等待用户按任意键后继续 
rem		表示此命令后的字符为解释行(注释),不执行,只是给自己今后参考用的(相当于程序中的注释)。 

:标号
GOTO标号
goto:eof 跳转到末尾
cls		清屏
---------------------------------------------------------set
set /P var=[string]	显示string,然后接受输入给var
set DB_PATH=%CD%	设置DB_PATH为当前目录
---------------------------------------------------------if
命令1 if [NOT] ERRORLEVEL 数字0-255 命令2		命令1返回值=数字时 执行命令2
if [NOT] string1==string2 命令				string1等于string2 执行命令
if [NOT] EXIST 文件 命令				文件存在 执行命令
---------------------------------------------------------for、shift
for 参数 %I in (command1) do command2    #(cmd)
for 参数 %%I in (command1) do command2    #(bat)
##遍历 command1的值赋予形式变量I,带到command2中参与命令的执行

 /d 仅匹配command1目录,仅在当前路径,不进入下级目录
 /R 递归,会进入下级目录
 /L 迭代数值范围 
 /F 处理文件和一些命令的输出结果
for /F %%i IN (file) DO command  
##for会依次将file中的文件打开,每一行作为一个元素 遍历
for /f "delims=+" %%i in (file) DO command  
## delims=分隔符,每一行按照+号切割,取第1个元素 然后下一行
for /f "tokens=2 delims=+" %%i in (file) DO command  
## tokens=角标, 每一行按照+号切割,取第2个元素  然后下一行

--------------------------------------------------------
& 连接符,命令格式 [...] command1 & command2 
#用来分隔一个命令行中的多个命令。Cmd.exe 运行第一个命令,然后运行第二个命令。
&& 代表上一句执行成功,命令格式 [...] command1 && command2 
#只有在符号 && 前面的命令成功时,才用于运行该符号后面的命令。Cmd.exe


%CD%		    当前目录
%~dp0		    为脚本自身目录
cd /d %~dp0	    跳转到自身目录

%date:~0,4%	    年
%date:~5,2%	    月
%date:~8,2%	    日

^	转义,末尾续行(转义了回车符号)
>    <	管道赋值

│ 命令 
Usage:第一条命令 │ 第二条命令
将第一条命令的结果作为第二条命令的参数来使用

;封号作用
	dir c:\\;d:\\;e:\\;		
    相当于
	dir c:\\
	dir d:\\
	dir e:\\

DOS命令如copy、dir、del、type、path、break、start等内部命令,以及ping、net、cmd、at、sort、attrib、fc、find等外部命令
#网卡操作
ipconfig/release 以太网		#释放当前"以太网"的ip
ipconfig/renew 以太网       #向DHCP获取一个"以太网"的ip


netsh interface set interface "以太网" disabled    #禁用"以太网"
netsh interface set interface "以太网" enabled    #启用"以太网"


 


sqlplus批量执行sql

用bat脚本批量执行sql文件, 操作数据库

例:输入数据库登录信息, 用sqlplus连接数据库,执行当前路径下的First.sql文件, 执行日志保存在ALL.log

@echo off
cd /d %~dp0
::color 2f
echo ************************************************************
echo **                                                        **
echo **                      esb srcb addtion                  **
echo **                                                        **
echo **                                                        **
echo ************************************************************
set DB_PATH=%CD%
echo current path is %DB_PATH%

echo 请输入网点管理平台安装的数据库的IP和端口(127.0.0.1:1521):
set /p HOST=
echo 请输入网点管理平台安装的数据库SID:
set /p ORACLE_SID=
echo 请输入指定的数据库用户名:
set /p DB_USER=
echo 请输入%DB_USER%的密码:
set /p DB_PWD=

echo 如果以上参数有问题,请Ctrl+C终止操作,若无问题,请按任意键创建表空间与用户
pause

cd %DB_path%
sqlplus   %DB_USER%/%DB_PWD%@%HOST%/%ORACLE_SID%  @./First.sql  %DB_USER% >"%DB_PATH%\ALL.log"

set /p =安装完毕,详情请到“%DB_PATH%”目录下查看日志;
exit

项目要求密码不能明文显示,找到两种可用方法, 使用以下代码替换 " set /p DB_PWD= " 即可

1.XP系统使用        [不显示字符]

>"%temp%\GetPwd.vbs" echo WScript.Echo CreateObject("ScriptPW.PassWord").GetPassWord()
set DB_PWD=
set /p =请输入数据库用户[%DB_USER%]的密码:<nul
for /f %%i in ('cscript //nologo "%temp%\GetPwd.vbs"') do set DB_PWD=%%i
del "%temp%\GetPwd.vbs"

2.win7及以上(内置powershell可用)      [输入字符以*号显示]

echo 请输入数据库用户[%DB_USER%]的密码:
  set "psCommand=powershell -Command "$pword = read-host -AsSecureString ; ^
      $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
          [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
  for /f "usebackq delims=" %%p in (`%psCommand%`) do set DB_PWD=%%p

猜你喜欢

转载自blog.csdn.net/xyc1211/article/details/82655828