1. 程式人生 > >BAT命令

BAT命令

for res delay 換行符 執行過程 sdl font 數字 span

BAT文件夾操作:

獲取文件夾下所有文件: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!
)
pause

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刪除目錄樹時不需要確認。

BAT之Find和FindStr:

find 作用:從文件中收索字符串

格式:find 參數 "字符串" 路徑\文件名

參數: /V 顯示所有未包含指定字符串的行。

/C 僅顯示包含字符串的行數。

/N 顯示行號。

/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更強的地方:

 1、統計含指定字符串的總行數。find /c "abc" test.txt可以統計test.txt中含有字符串abc的總行數,而findstr則沒有直接提供該功能,需要配合for語句才能實現;

  2、find可以讀取Unicode格式的文本,而findstr則不行;

  3、find可以過濾某些特殊字符,而findstr則不行,比如,我們在使用fsutil fsinfo drives語句查詢磁盤分區的時候,如果想讓盤符分行顯示而不是顯示在同一行上的時候(這在用for語句提取盤符的時候很有用),find可以大顯身手,而findstr只能幹瞪眼了,具體語句為: 代碼: fsutil fsinfo drives|find /v ""

BAT執行SQL:

Oracle bat批處理文件執行SQL文件
現實的項目中經常可能會出現需要用批處理文件來執行sql文件。下面就介紹下用bat批處理文件調用獨立的sql文件和數據庫中的存儲過程。

一、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 [email protected] @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表確實是建立起來了。

二、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

BAT命令