BAT命令

BAT文件夹操做:css

获取文件夹下全部文件:DIR *.* /B >list.TXT
循环获取文件夹下全部文件:
cd ./%date:~2,2%%date:~5,2%%date:~8,2%
for /R %%s in (.,*) do (
echo %%s >> ../list.txt
)
循环获取文件夹下全部文件:
cd ./%date:~2,2%%date:~5,2%%date:~8,2%
for /R %%s in (*) do (
echo %%s >> ../跑很多天志.txt
)
循环获取文件夹下全部文件名:
for /f "delims=" %%a in ('dir /b/a-d/oN *.*') do(
echo %%a >>../当前文件夹内文件名.txt
)
批处理命令读取文件中每一行到变量中:
@echo off & setlocal EnableDelayedExpansion
set j=0
for /f "delims=""" %%i in (a.txt) do (
set /a j+=1
set con!j!=%%i
call set a=%%con!j!%%
echo !a!
)
pausehtml

 

BAT之del命令和rd命令:正则表达式

del命令
命令说明:del命令一共有5个参数,分别是/p、/f、/s、/q和/a。
/p参数的做用是删除每个文件以前提示确认,这个参数的主要做用是当你要删除多个文件时(不用通配符)提示你确认删除,若是你只是删除单个文件或多个文件(用通配符),默认是不会提示你确认删除的。
/f参数的做用是强制删除只读文件,这个参数的做用很好理解,当咱们删除只读文件时,系统会提示拒绝访问,这时就要利用这个参数了。
/s参数的做用是从全部子目录删除指定文件,这个参数的做用也很好理解,我就不解释了。
/q参数的做用是删除全局通配符时,不要求确认。当咱们利用全局通配符来删除多个文件时,默认会提示你是否删除全部文件,若是你用了这个参数,系统就不会提示你了。
/a参数的做用是根据属性选择要删除的文件。其中,r表示只读文件,s表示系统文件,h表示隐藏文件,a表示存档文件,还有一个-表示“否”的前缀。这样说很差理解,我举个实例来讲明:我要删除D:\test目录下的全部只读文件,此时我只需在命令行中输入del /a:r D:\test\*就能够了,相反,若是我要删除除了只读之外的全部文件,我就要输入del /a:-r D:\test\*。

rd命令
命令说明:rd命令只有2个参数,分别是/s和/q。
/s参数的做用是除目录自己外,还将删除指定目录下的全部子目录和文件。用于删除目录树。若是不带这个参数就只能删除空文件夹。
/q参数的做用是安静模式,带/s删除目录树时不须要确认。sql

 

BAT之Find和FindStr:数据库

find 做用:从文件中收索字符串网络

格式:find 参数 "字符串" 路径\文件名spa

参数: /V 显示全部未包含指定字符串的行。命令行

/C 仅显示包含字符串的行数。日志

/N 显示行号。code

/I 搜索字符串时忽略大小写。

/OFF[LINE] 不要跳过具备脱机属性集的文件。

当文件中包含要查找的字符串时,将返回这个字符串所在位置的整行内容。默认状况下是区分大小写的,若想要

不区分大小写就是用参数 /i 有时候,咱们的需求并非为了查找到某个字符串,而是要检测哪些行不含有特定的

字符串,这个时候,可使用开关/v,用法为:find /v "Abc" test.txt,它表示查找那些不含字符串Abc的行(Abc要

区分大小写),若是不区分abc的大小写,那么,应该写成 find /i /v "Abc" test.txt。还有一点是find 支持查找通配

符文件。如 find "1" *.txt。

findstr 是find的扩展,功能更强大

格式:findstr 参数 字符串 路径\文件名

参数: /B 在一行的开始配对模式。 (就是指以字符串开头,begin 这样就方便了记忆)

/E 在一行的结尾配对模式。(就是指以字符串结尾,end 这样就方便记忆)

/L 按字使用搜索字符串。就是将后面的""里的当成一个字符

/R 将搜索字符串做为通常表达式使用。

/S 在当前目录和全部子目录中搜索匹配文件。

/I 指定搜索不分大小写。(英文:ignore 忽略)

/X 打印彻底匹配的行。/x 是指彻底匹配,就是说整行匹配,而不是含有关键字.

/V 只打印不包含匹配的行。(就是找出不包含字符串的)

/N 在匹配的每行前打印行数。(就是在输出行的前面加上原文件中的行数,英文:number)

显示的结果中冒号(:)是英文格式下的,在用for提取的时候须要注意!

/M 若是文件含有匹配项,只打印其文件名。(指定文件中输出含有字符串的文件名)

/O 在每一个匹配行前打印字符偏移量。o开关的做用是告诉你每行第一个字符前的位置是该文件中的第几个字节

计算时别忘了文本中不可见的回车符合换行符将占两字节(某些文本中只占一字节)。还有空格键一个字符。

确定听不懂。看例子:1.txt文件内容: 就三行三个c没有空格。输入:findstr /o c 1.txt 结果是:

c 0:c

c 3:c

c 6:c

怎么计算:第一行的c前没有字符因此是0.第二行的c前一行只有一个c算一个字符因为是第二行因此算一个回车

2个字符就是:1+2=3同理第三个c前有2个字符和2个回车:1*2+2*2=6.。

/P 忽略有不可打印字符的文件。(我不清楚,我的没法解释)

/C:string 使用指定字符串做为文字搜索字符串。

如:findstr /c:"a b" 1.txt 就会找出含"a b"的行并输出来(注意a和b中间有空格)

若是不用参数/c:findstr "a b" 1.txt 就会输出含有字母 a 或 b 的行。

/G:file 从指定的文件得到搜索字符串。 (/ 表明控制台)。

如:findstr /g:2.txt 1.txt 就是把1.txt中含有2.txt中任一行内容的行输出来。

上面的有点像:@echo off

for /f "delims=" %%a in ('type 2.txt') do (

findstr "%%a" 1.txt

echo.)

pause

(以上是本身试出来的,不保证正确)

/A:attr 指定有十六进位数字的颜色属性。请见 "color /?"(使用这个能够在dos上面搞出不一样颜色的字,本身想一想)

/F:file 从指定文件读文件列表 (/ 表明控制台)。

/D:dir 查找以分号为分隔符的目录列表

/OFF[LINE] 不跳过带有脱机属性集的文件。

除非参数有 /C 前缀,请使用空格隔开搜索字符串。

例如: FINDSTR "hello there" x.y 在文件 x.y 中寻找 "hello"或"there" 。 FINDSTR /C:"hello there" x.y 文

件 x.y 寻找"hello there"。

通常表达式的快速参考:

. 通配符: 任何字符

* 重复: 之前字符或类别出现零或零以上次数

^ 行位置: 行的开始

$ 行位置: 行的终点

[class] 字符类别: 任何在字符集中的字符

[^class] 补字符类别: 任何不在字符集中的字符

[x-y] 范围: 在指定范围内的任何字符

\x Escape: 元字符 x 的文字用法

\<xyz 字位置: 字的开始

xyz\> 字位置: 字的结束

<和\>是单词锚定 ^是行首 $是行尾

注意的是:别把^,$和\<,\>弄混了一个是行一个是字。行开始与结束没什么好说的。而字的开始和结束就不同了,例如:

1.txt里两行为"abcd" 和 "abcd e"用命令findstr "cd\>" 1.txt 两行都会出现,只要是连在一块儿(没被空格开)的

并以cd结尾的(不 要求是行尾)都知足。至关于文本中出现英语中以cd结尾的的单词了的行都会输出来。

 

举一些例子(来自网络):

1.findstr . 2.txt 或 findstr "." 2.txt 2.findstr .* 2.txt 或 findstr ".*" 2.txt

从文件2.txt中查找任意字符,不包括空字符或空行 从文件2.txt中查找任意字符包括空行和空字符

==================== ====================

3.findstr "[0-9]" 2.txt 4.findstr "[a-zA-Z]" 2.txt

从文件2.txt中查找包括数字0-9的字符串或行 从文件2.txt中查找包括任意字符的字符串或行

==================== ====================

5.findstr "[abcezy]" 2.txt 6.findstr "[a-fl-z]" 2.txt

从文件2.txt中查找包括a b c e z y字母的字符串或行 从文件2.txt中查找小写字符a-f l-z的字符串,但不包含g h I j k这几个字母。

==================== ====================

7.findstr "M[abc][hig]Y" 2.txt 8. ^和$符号的应用

从文件2.txt中能够匹配 MahY , MbiY, MahY等….. ^ 表示行首,"^step"仅匹配 "step hello world"中的第一个单词

$ 表示行尾,"step$"仅匹配 "hello world step"中最后一个单词

==================== ====================

9.finstr "[^0-9]" 2.txt

若是是纯数字的字符串或者行便过滤掉,例如2323423423 这样的字符串,若是是345hh888这样的形式就不成了。

====================

10.findstr "[^a-z]" 2.txt

同上,若是是纯字母的字符串或者行便过滤掉,例如 sdlfjlkjlksjdklfjlskdf这样的字符,若是是sdfksjdkf99999这样的形式,掺杂着数字就不成了

====================

11.*号的做用

前面已经说过了 ".*"表示搜索的条件是任意字符,*号在正则表达式中的做用不是任何字符,而是表示左侧字符或者表达式的重复次数,*号表示重复的次数为零次或者屡次。

====================

12.findstr "^[0-9]*$" 2.txt

这个是匹配找到的纯数字,例如 234234234234,若是是2133234kkjl234就被过滤掉了。

Findstr "^[a-z]*$" 2.txt

这个是匹配找到的纯字母,例如 sdfsdfsdfsdf,若是是213sldjfkljsdlk就被过滤掉了

如 果在搜索条件里没有*号,也就是说不重复左侧的搜索条件,也就是[0-9] [a-z]那只能匹配字符串的第一个字符也只有这一个字符,由于有行首和行尾的限制,"^[0-9]$"第一个字符若是是数字就匹配,若是不是就过滤掉, 若是字符串是 9 就匹配,若是是98或者9j之类的就不能够了。

=====================

13. "\<…\>"这个表达式的做用

这个表示精确查找一个字符串,\<sss 表示字的开始位置,sss\>表示字的结束位置

echo hello world computer|findstr "\<computer\>"这样的形式

echo hello worldcomputer|findstr "\<computer\>" 这样的形式就不成了,他要找的是 "computer"这个字符串,因此不能够。

echo hello worldcomputer|findstr ".*computer\>"这样就能够匹配了

14.吧1.txt文档中超过10个字符的行输出到2.txt

@findstr .......... 1.txt>2.txt

感受好像2.txt里是少于10个字符的行,但是实际倒是超过10个字符的行,包括10个字符。

以上内容转自:http://hi.baidu.com/bs0%D0%A1%B3%C2/blog/item/3f9c39ee0d29c0cbd439c94a.html

find比findstr更强的地方:

 一、统计含指定字符串的总行数。find /c "abc" test.txt能够统计test.txt中含有字符串abc的总行数,而findstr则没有直接提供该功能,须要配合for语句才能实现;

  二、find能够读取Unicode格式的文本,而findstr则不行;

  三、find能够过滤某些特殊字符,而findstr则不行,好比,咱们在使用fsutil fsinfo drives语句查询磁盘分区的时候,若是想让盘符分行显示而不是显示在同一行上的时候(这在用for语句提取盘符的时候颇有用),find能够大显身手,而findstr只能干瞪眼了,具体语句为: 代码: fsutil fsinfo drives|find /v ""

 

BAT执行SQL:

 

Oracle bat批处理文件执行SQL文件
现实的项目中常常可能会出现须要用批处理文件来执行sql文件。下面就介绍下用bat批处理文件调用独立的sql文件和数据库中的存储过程。

 

1、bat文件调用sql文件

 

首先,作一个简单的sql文件(log.sql)。

 

create table log
(
PROBLEMID VARCHAR2(40),
PROBLEMNAME VARCHAR2(260),
PROBLEMLEVEL VARCHAR2(40),
PROBLEMORDER VARCHAR2(260),
PARENTID VARCHAR2(40),
ROOTTYPEDESC VARCHAR2(260),
IFLEAF VARCHAR2(40),
MEMO VARCHAR2(1000),
IFVALID VARCHAR2(40),
ROOTTYPE VARCHAR2(20)
);
exit;
在这个SQL文件中咱们建立了一个表。

 

接下来,咱们来建一个bat批处理文件(log.bat)。

 

@echo off
sqlplus cssp/cssp@gxcssp @H:\bat_sql\log.sql > log.txt
exit
在这个bat文件里面咱们调用绝对路径的sql文件,并将执行过程及结果输出到log.txt文件中。

 

最后,咱们运行bat文件,来看下一log.txt文件记录内容。

 

SQL*Plus: Release 10.1.0.2.0 - Production on 星期四 4月 7 18:26:03 2011

Copyright (c) 1982, 2004, Oracle. All rights reserved.


链接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options


表已建立。

从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开

经过这个日志咱们能够看到,建立log表是成功的了。再去数据库中确认,也能够看到log表确实是创建起来了。

 

2、bat文件调用数据库中的存储过程

 

这个调用过程和上面的调用过程原理是同样的,在此就作个简单的说明。

 

假设数据库中一个存储过程,名称为Produce_log

 

咱们只须要修改独立的sql文件以下便可:

 

execute Produce_log;
exit;

 

具体的执行结果请朋友们本身尝试。

 

BAT命令批量删除某种格式的文件:

 

::@echo off
rem 正在搜索...
rem 删除文件
for /f "delims=" %%i in ('dir /b /a-d /s "*.mdc"') do del %%i
rem 删除完毕
pause

 

@echo off
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /a-d /s "*.mdc"') do call someAction
rem 搜索完毕
pause

相关文章
相关标签/搜索