常用软件注册为Widows服务

1、Apache注册为Widows服务

httpd -k install

2、MySQL注册为Widows服务

mysqld --install MySQL --defaults-file="D:\MySQL\MySQL Server 5.1\my.ini"

3、PostgreSQL注册为Widows服务

pg_ctl.exe register -N "postgresql-8.4" -D "D:/PostgreSQL/8.4/data" -w

4、SVN注册为Widows服务

sc create svnserve binPath= "\"D:\Subversion\bin\svnserve.exe\" --service -r \"D:\Subversion\repository\"" displayname= "Subversion Service" depend= Tcpip start= auto 
sc start svnserve 
sc stop svnserve 
sc delete svnserve

5、redis注册为Widows服务

#loglevel 分为debug, notice, warning三级
redis-server.exe --service-install D:\Database\Redis2.8\db\redis.windows.conf --loglevel notice
redis-server --service-start
redis-server --service-stop
redis-server --service-uninstall

6、mongodb注册为Widows服务

mongod --dbpath=D:\Database\MongoDB3\db --logpath=D:\Database\MongoDB3\log\mongo.log --port 27027 --noauth --install -serviceName MongoDB01 --serviceDisplayName MongoDB01 
net start MongoDB01

BAT获取管理员权限模板

@echo off

:AQUIRE_ADMINISTRATOR_PRIVILEGE
rem 获取管理员权限
rem 首先在%windir%尝试新建文件夹,查看是否有管理员权限
rem 如果新建文件夹成功则删除文件夹,继续操作
rem 如果失败文件夹则新建vbs脚本,通过UAC窗口,获取管理员权限
rem 运行脚本后,删除vbs脚本
md "%windir%\TestAdminPrivilege" > nul
cls
if '%errorlevel%' == '0' ( 
  rmdir "%windir%\TestAdminPrivilege" & goto gotAdmin 
) else (goto UACPrompt)
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute %0, "", "", "runas", 1  >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" (del "%temp%\getadmin.vbs")
CD /D "%~dp0"  

:Init
REM 设置窗口标题,窗口颜色,并输出提示信息,通过输入来判断跳转到哪里
cls
title CMD窗口标题
color A
set CHOICE=
echo ----------------------------提示信息标题-------------------------------------
echo.
echo                             提示信息内容
echo                             提示信息内容
echo.
echo ----------------------------------------------------------------------------
echo           您需要以管理员身份运行,或关闭“用户帐户控制(UAC)”
echo ----------------------------------------------------------------------------
:RE_INPUT
echo.
echo  键入 i 安装,键入 r 卸载,键入 q 退出 (键入后请按回车键确认)
set /P CHOICE= ^> 选择:
if /I "%CHOICE%" == "i" goto INSTALL_DETECT
if /I "%CHOICE%" == "r" goto REMOVE
if /I "%CHOICE%" == "q" goto END
goto INPUT_UNKNOWN

:REMOVE
echo  删除提示信息
rem del /F /Q FULL_FILE_PATH
REM reg IMPORT UNINSTALL_DRIVER.REG
goto REMOVE_END

:REMOVE_END
echo  卸载完毕提示信息
goto END

:INSTALL_DETECT
REM 判断32位还是64位系统
if /I "%PROCESSOR_ARCHITECTURE%" == "AMD64" goto INSTALL64
if /I "%PROCESSOR_ARCHITECTURE%" == "x86" goto INSTALL32
goto INSTALL_UNKNOWN

:INSTALL64
echo  将为您安装64位程序
echo  安装提示信息
REM copy /Y FROM_PATH_64 TO_PATH
REM reg IMPORT INSTALL_DRIVER.REG
goto INSTALL_END

:INSTALL32
echo  将为您安装32位程序
echo  安装提示信息
REM copy /Y FROM_PATH_32 TO_PATH
REM reg IMPORT INSTALL_DRIVER.REG
goto INSTALL_END

:INSTALL_END
echo  安装成功提示信息
goto END

:INPUT_UNKNOWN
echo  键入的信息错误,请重试
goto RE_INPUT

:INSTALL_UNKNOWN
echo  未能识别您的系统信息,无法为您安装驱动,您可能需要手动安装
goto END

:END
REM 清理环境变量
echo.
set CHOICE=
pause

切换网络BAT

1、切换为DHCP

@netsh interface ip set address name="本地连接" source=dhcp

@netsh interface ip set dns name="本地连接" source=dhcp

2、切换为静态IP

@netsh interface ip set address name="本地连接" source=static addr=xxx.xxx.xxx.xxx mask=255.255.255.0 gateway=xxx.xxx.xxx.xxx

@netsh interface ip set dns name="本地连接" source=static addr=xxx.xxx.xxx.xxx

CMD用户交互判断重新运行或直接运行

::Hansen
::2012-02-22

@call Clean.bat
@call SetEnv.bat
@title XXXX

:RunHere
@cls
@xxxxxxxxxxxx
@echo 运行完毕

:StartInput
@set /p var=重新运行(R)还是退出(E)?
@if /i "%var%"=="E" exit()
@if /i "%var%"=="R" (goto RunHere)
@echo 输入错误,请重试!
@goto StartInpu

Bat中特殊符号

1、.
表示当前目录

dir .\

2、..
表示上一级目录

dir ..\

3、””
界定符号,通常用来引用有空格的目录

dir "c:\Documents and settings"

4、::
注释,和REM类似

5、*
通配符号,表示任意个字符

dir c:\windows\*.log

6、?
通配符号,表示任意一个字符

dir c:\?indows

7、^
转义符

echo ^> >d:\1.txt

8、@
只显示命令执行结果

@echo 你好

9、>
重定向符号,覆盖

dir c:\ > d:\test.txt

10、>>
重定向符号,追加

dir c:\ >> d:\test.txt
dir d:\ >> d:\test.txt

11、|
管道符

netstat -an | find "135"

12、,
某些时候可以当空格来使用

echo,
dir,c:\

13、;
当命令相同时,可以将不同目标用来隔离

dir c:\;d:\

14、&
两个命令连续执行

dir c:\ & dir d:\ & dir e:\

15、&&
当&&前的命令执行成功时,执行&&后的命令

dir c:\ && dir d:\
dir z:\ && dir d:\

16、||
当||前的命令执行失败后,才执行||符号后的内容

dir z:\ || dir c:\
dir c:\ || dir d:\

17、%
%%用于引用变量

set hello=hi
echo %hello%

18、:
标签

@echo off
:again
echo It's me again 🙂
pause
goto again

Bat截取字符串

%var:~n,k%
把这条命令理解为两条子命令
n为开始截取字符的位置,从左向右位置为(0,1,2,3 ...),从右向左位置为(-1,-2,-3,-4)
k为对n右侧字符截取到的位置,k>0从n向右截取的位置,k<0从字符串尾向前截取的位置
n默认从字符串最左边开始,k默认为截断到字符串尾
@echo off
rem echo %var:~n,k%
set str=0123456789

echo 字符串为:%str%
echo 第一个字符为:%str:~0,1%
echo 第二个字符为:%str:~1,1%
echo 倒数第一个字符为:%str:~-1,1%
echo 倒数第二个字符为:%str:~-2,1%
echo 截取前三个字符:%str:~0,3%
echo 截取后三个字符:%str:~-3,3%
echo 第三个字符及其之后的字符为:%str:~2%
echo 倒数第三个字符及其之后的字符为:%str:~-3%
echo 截取到倒数第三个字符:%str:~0,-3%
echo 截取倒数第五和第四个字符:%str:~-5,2%

pause

Cluster切换时丢失网关

公司在一家医院做实施,将Tomcat,存储,Oracle都做好了Cluster

但好景不长:
切换几次后,总会有一台服务器连不上,ping都ping不通,只好再手工切回去

后来发现,切换后把网关给丢掉了
在cmd下ipconfig -all,网关为空,但在连接属性的TCP/IP设置里,网关仍健在

唉,在google未果的情况下,只好做了件很无奈的事情,
写了个脚本,去设置网关

Rem Hansen
set myinterface=本地连接
set mygateway=192.168.100.1
netsh interface ip set address name="%myinterface%" gateway="%mygateway%" gwmetric=1
pause

居然还算管用,将就一下吧,唉