以前的时候就觉得批处理非常的神奇,还借过一本批处理的小书来看,很不幸的,没学下去,看没多久就看不下去了.来公司这段时间,经常干一些重复性的事,所以就想用批处理来完成.但是吧,断断续续,看了很长一段时间,好不容易才把一个57KB大小的chm给看完.内容不多,只能够简单的学习一些比较常见的用法.想着好不容易才看完,不写点东西,怎么对得起学的批处理.所以就写了一些简单的操作.
我最频繁的操作莫过于,每天在家时Kill SqlServer的一系列进程,以及在公司的时候Kill一些Oracle的进程,因为用不到,他们占内存又太大了.使用的语句就是taskkill,关闭进程;taskkill /im 进程显示名,或者加上/f表示强制关闭进程,或者/im pid,指定要终止的进程的PID.
所以写了如下的语句,@echo off是用来控制关闭回显,echo可以显示提示信息,rem用来注释,taskkill关闭进程,/f表示强制,SqlServer的基本都要求强制关闭,否则关闭不了.关闭指定的PID,对于fdlauncher.exe刚刚他的PID为1664,下次就不一定是什么了.所以如果用PID,多次执行,很容易提示找不到这个PID.Pause,就是那句"请按任意键继续….".
@echo off
echo 关闭SqlServer的进程
rem SQL Full Texthost
taskkill /f /imfdhost.exe
rem SQL Full-textFilter Daemon Launch Service
rem taskkill /im fdlauncher.exe
taskkill/f /im 1664
rem SQL Server VSSWriter
taskkill/f /im sqlwriter.exe
rem SQL Server Windows NT
taskkill /f /imsqlservr.exe
rem SQL ServerIntegration Services Service
taskkill /f /imMsdtsSrvr.exe
Pause
效果就是如下,因为执行了多次,所以很多进程已经被结束掉了,所以提示找不到进程.
还有就是选择语句,如果在公司是执行这段,在家里是执行这段.set /pvar = ,表示需要在命令窗口输入值,输入的值就赋给var,如输入1,则var为1;所以下面判断%var%是否等于1,等于1就goto home,等于2就goto company.对于取得变量var的值,必须用%var%.
@echo off
echo 1.home2.company
set /p var=
if %var% equ 1 gotohome
if %var% equ 2 gotocompany
:home
上面那段代码
:company
rem***
Pause
运行效果就是这样,中间的代码省了,省的写的重复.
还有比较常用的就是打开文件夹的语句,使用开启命令,start文件路径.很简单的,如下,就能打开E盘下的批处理文件夹.
Start E:\批处理
Pause
除了打开文件夹的语句,就是复制粘贴的语句用的最多.具体需要做的就是,如将D盘下的文件夹abc(都叫这个名),备份到F盘的备份下.备份要做的就是将abc放在一个新建的文件夹下,这个文件夹一定要根据日期命名,如20140730abc).语句如下
由于D:\abc和F:\备份都是已经存在的,所以需要新建,不想手动新建也可以用md新建.
@echo off
rem 新建文件夹和文件
rem mdd:\abc\abcd
rem echo test>>d:\abc\test.txt
rem md f:\备份
rem 新建备份的文件,根据日期命名
set var=f:\备份\%date:~0,4%%date:~5,2%%date:~8,2%abc\abc
md %var%
rem 打开文件
Start d:\abc
Start %var%
rem 拷贝文件夹
xcopy /s /e /h d:\abc %var%
Pause
从上到下依次说明,使用md可以新建文件夹,md + 路径,可以是相对路径,也可以是绝对路径;echo test >>d:\abc\test.txt可以创建test.txt文件,并且写入往里写了test,>>表示不会覆盖,会往文本里接着添加.set设置变量var,把路径生成好,由于需要生成20140730这种,所以将年月日依次取出,组合.%date:~0,4%,取出年;然后用start可以打开文件.最后就是xcopy的拷贝文件夹,xcopy /s /e /h d:\abc %var%,从左到右读,拷贝d盘的abc文件夹到指定目录下.由于xcopy只能将abc下的所有内容拷到f盘下,但是abc本身不会拷过去,所以新建的时候我将abc文件夹也创建进去了,这样d盘abc下的所有文件就会在f盘的abc下了,就相当于我把abc整个文件夹拷了过去./s表示拷贝文件夹中所有非空的目录和子目录,/e会把空目录也拷过去,/h会把隐藏文件和系统文件拷过去,还有/y,当文件存在的时候,可以直接覆盖不提示,但是我怕出错,万一直接覆盖错了怎么办?所以还是没有用.
运行效果如下
以上就是我对批处理的简单应用,还算是比较实用的.但是这只是简单的应用,还有很多没有考虑到,比如我打开了文件夹是想查看,省的出错,但是打开的文件夹还要我一一关闭,有些麻烦.还有就是比如我的创建文件夹,如果今天一天要拷贝2次,那么第二个文件夹该如何命名,这个会覆盖肯定不对;还有我的操作其实是远程操作的时候,有的时候是从我本地拷到远程,有的时候是从远程拷到我本地,还有的时候是从远程拷到远程,这个该如何实现.呵呵,其实我也不知道,如果我解决了,会写下下一篇博客的.