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