一、單符號
~① 在for中表示使用增強的變量擴展。
② 在%var:~n,m%中表示使用擴展環境變量指定位置的字符串。
③ 在set/a中表示一元運算符,將操作數按位取反。
!① 在set /a中一元運算符,表示邏輯非。比如set /a a=!0,這時a就表示邏輯1。
@① 隱藏命令行本身的回顯,常用于批處理中。
$① 在findstr命令里面表示一行的結束。
② 在prompt命令里面,表示將其后的字符轉義(符號化或者效果化)。
%① 在set /a中的二元運算符,表示算術取余。
② 命令行環境下,在for命令in前,后面接一個字符(可以是字母、數字或者一些特定字符),表示指定一個循環或者遍歷指標變量。
③ 批處理中,后接一個數字表示引用本批處理當前執行時的指定的參數。
④ 其它情況下,%將會被脫去(批處理)或保留(命令行)
^① 取消特定字符的轉義作用,比如& | > < ! "等,但不包括%。比如要在屏幕顯示一些特殊的字符,比如> >> | ^ &等符號時,就可以在其前面加一個^符號來顯示這個^后面的字符了,^^就是顯示一個^,^|就是顯示一個|字符了;
② 在set/a中的二元運算符,表示按位異或。
③ 在findstr/r的[]中表示不匹配指定的字符集。
&① 命令連接字符。比如我要在一行文本上同時執行兩個命令,就可以用&命令連接這兩個命令。
② 在set/a中是按位與。
*① 代表任意個任意字符,就是我們通常所說的"通配符";比如想在c盤的根目錄查找c盤根目錄里所有的文本文件(.txt),那么就可以輸入命令"dir c:\*.txt"。
② 在set /a中的二元運算符,表示算術乘法。
③ 在findstr/r中表示將前一個字符多次匹配。
-① 范圍表示符,比如日期的查找,for命令里的tokens操作中就可以用到這個字符。
② 在findstr/r中連接兩個字符表示匹配范圍。
③ -跟在某些命令的/后表示取反向的開關。
④ 在set /a中:
1.表示一個負數。
2.表示算術減運算。
+① 主要是在copy命令里面會用到它,表示將很多個文件合并為一個文件,就要用到這個+字符了。
② 在set/a中的二元運算符,表示算術加法。
:① 標簽定位符,表示其后的字符串為以標簽,可以作為goto命令的作用對象。比如在批處理文件里面定義了一個":begin"標簽,用"goto begin"命令就可以轉到":begin"標簽后面來執行批處理命令了。
② 在%var:string1=string2%中分隔變量名和被替換字串關系。
|① 管道符,就是將上一個命令的輸出,作為下一個命令的輸入."dir /a/b |more"就可以逐屏的顯示dir命令所輸出的信息。
② 在set/a中的二元運算符,表示按位或。
③ 在幫助文檔中表示其前后兩個開關、選項或參數是二選一的。
/① 表示其后的字符(串)是命令的功能開關(選項)。比如"dir /s/b/a-d"表示"dir"命令指定的不同的參數。
② 在set/a中表示除法。
>① 命令重定向符,將其前面的命令的輸出結果重新定向到其后面的設備中去,后面的設備中的內容被覆蓋。比如可以用"dir > lxmxn.txt"將"dir"命令的結果輸出到"lxmxn.txt"這個文本文件中去。
② 在findstr/r中表示匹配單詞的右邊界,需要配合轉義字符\使用。
<① 將其后面的文件的內容作為其前面命令的輸入。
② 在findstr/r中表示匹配單詞的左邊界,需要配合轉義字符\使用。
=① 賦值符號,用于變量的賦值。比如"set a=windows"的意思意思是將"windows"這個字符串賦給變量"a"。
② 在set/a中表示算術運算,比如"set /a x=5-6*5"。
\① 這個"\"符號在有的情況下,代表的是當前路徑的根目錄.比如當前目錄在c:\windows\system32下,那么你"dir \"的話,就相當與"dir c:\"。
② 在findstr/r中表示正則轉義字符。
,① 在set /a中表示連續表達式的分割符。
② 在某些命令中分割元素。
.① 在路徑的\后緊跟或者單獨出現時:
一個.表示當前目錄。
兩個.表示上一級目錄。
② 在路徑中的文件名中出現時:
最后的一個.表示主文件名與擴展文件名的分隔。
?① 在findstr/r中表示在此位置匹配一個任意字符。
② 在路徑中表示在此位置通配任意一個字符。
③ 緊跟在/后表示獲取命令的幫助文檔。
二、多符號(符號不能分隔)&&① 連接兩個命令,當&&前的命令成功時,才執行&&后的命令。
||① 連接兩個命令,當||前的命令失敗時,才執行||后的命令。
>& ① 將一個句柄的輸出寫入到另一個句柄的輸入中。
<&① 從一個句柄讀取輸入并將其寫入到另一個句柄輸出中。
%%① 兩個連續的%表示在預處理中脫為一個%。
② 批處理中,在for語句的in子句之前,連續兩個%緊跟一個字符(可以是字母、數字和一些特定字符),表示指定一個循
環或者遍歷指標變量。
③ 批處理中,在for語句中,使用與in之前指定的指標變量相同的串,表示引用這個指標變量。
>>① 命令重定向符,將其前面的命令的輸出結果追加到其后面的設備中去。
② 在set /a中的二元運算符,表示邏輯右移。
==① 在if命令中判斷==兩邊的元素是否相同。
<<① 在set /a中的二元運算符,表示邏輯左移。
+=① 在set /a中的二元運算符。例如set /a a+=b表示將a加上b的結果賦值給a。
-=① 在set /a中的二元運算符。例如set /a a-=b表示將a減去b的結果賦值給a。
*=① 在set /a中的二元運算符。例如set /a a*=b表示將a乘以b的結果賦值給a。
/=① 在set /a中的二元運算符。例如set /a a/=b表示將a加上b的結果賦值給a。
%=① 在set /a中的二元運算符。例如set /a a%=b表示將a除以b的余數賦值給a。
【注:命令行可以直接用 set /a a%=b ,在批處理里面可以用 set /a a%%=b 。】
^=① 在set /a中的二元運算符。例如set /a a"^="b表示將a與b按位異的結果賦值給a。
【注:這里 "^=" 加引號是為了防止^被轉義,下同。】
&=① 在set /a中的二元運算符。例如set /a a"&="b表示將a與b按位與的結果賦值給a。
|=① 在set /a中的二元運算符。例如set /a a"|="b表示將a與b按位或的結果賦值給a。
<<=① 在set /a中的二元運算符。例如set /a a"<<="b表示將a按位左移b位的結果賦值給a。
>>=① 在set /a中的二元運算符。例如set /a a">>="b表示將a按位右移b位的結果賦值給a。
\<① 在findstr的一般表達式中表示字的開始處。
\>① 在findstr的一般表達式中表示字的結束處。
三、雙符號對(兩個符號之間須指定字符串)! !① 當啟用變量延遲時,使用!!將變量名擴起來表示對變量值的引用。
' '① 在for/f中表示將它們包含的內容當作命令行執行并分析其輸出。
② 在for/f "usebackq"中表示將它們包含的字符串當作字符串分析。
( )① 命令包含或者是具有優先權的界定符,比如for命令要用到這個(),我們還可以在if,echo等命令中見到它的身影。
② 在set /a中表示表達式分組。
" "① 界定符,在表示帶有空格的路徑時常要用""來將路徑括起來,在一些命令里面也需要" "符號。
② 在for/f中將表示它們包含的內容當作字符串分析。
③ 在for/f "usebackq"表示它們包含的內容當作文件路徑并分析其文件的內容。
④ 在其它情況下表示其中的內容是一個完整的字符串,其中的>、>>、<、&、|、空格等不再轉義。
` `① 在for/f中表示它們所包含的內容當作命令行執行并分析它的輸出。
% %① 使用兩個單獨的%包含一個字符串表示引用以此串為名的環境變量。比如一個%time%可以擴展到當前的系統時間。
[ ]① 在幫助文檔表示其中的開關、選項或參數是可選的。
② 在findstr /r中表示按其中指定的字符集匹配。
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
1.^取消特殊符號的作用
例子:echo ^> >1.txt 將“>”輸出到1.txt中
2.","某些時候可以當空格使用
例子:echo, dir,c:\
3.";"當命令相同時,可以將不同目標用;來隔離
例子:dir c:\;d:\
4.= 賦值符號,變量賦值。如"set a=windows"是將"windows"這個字符串賦給變量"a"。
在set/a中表示算術運算,比如"set /a x=5-6*5"。
命令:SET /P Choice=選擇:
顯示:選擇: 提示輸入“abc”
命令:echo %choice%
顯示:abc
@echo off
set txt1=%time:~0,2%
::當前小時
set txt2=%time:~3,2%
::當前分鐘
set txt3=%time:~6,2%
::當前秒
set time=%txt1%%txt2%%txt3%
echo 當前時間:%txt1%:%txt2%:%txt3%
5.%在for循環中,循環變量引用格式:%%變量名.
如:SUM.bat
@echo off
::求1+2+3+…
set sum=0
for /l %%i in (1,1,%1) do set /a sum+=%%i
echo 1+2+3+…+100=%sum%
說明:在命令行下輸入SUM 100,顯示結果為:
1+2+3+…+100=505
6.>>想用批處理實現向s.txt中多次分別導入文本例如:“aaaa","bbbb","cccc"
實現s.txt內效果如:
aaaabbbbcccc
可以執行
>>s.txt set/p="aaaa" <nul 同set/p="aaaa" >>s.txt <nul
>>s.txt set/p="bbbb" <nul
>>s.txt set/p="cccc" <nul
7.一個刪除行的批處理
有一A.TXT文件,在其中找到HZF時,刪除含有HZF字符串的行(不分大小寫).
findstr /ivc:"HZF" a.txt >b.txt
@dir |findstr /n .* 給DIR文件打上行號
find /v "HZF" a.txt>b.txt
8.用批處理刪除文本每行的前幾個字符
現在有a.txt 內容如下
\t (00:00:02) 123856
\t (00:00:03) Hi!lg
\i (00:00:03) traps
\w (00:00:03) Diele
\i (00:00:07) open
現在想把 ) 以及前面的內容刪除 只剩下
123856
Hi!ED
traps
Diele
open
for /f "tokens=3 delims= " %%a in (a.txt) do echo %%a>>b.txt 以空格為分隔符取第3個段內容,如果為"tokens=2 delims= "則會選取包括括號以內的內容tokens只能是數字 delims是多個字符,如()
9.一文本:D:\w\tongji.txt 共2000行,現在需要刪除前1500行,保留最后的500行。
for /f "SKIP=1500 tokens=*" %%i in (D:\w\tongji.txt ) do (echo %%i>>hh.txt)
刪除空白行
for /f "eol==" %%a in (aa.txt) do echo %%a>>b.txt 刪除首字符為=的所有行及空白行
for /f "delims=" %%i in (aa.txt) do echo %%i>>b.txt 刪除空白行
實際上"eol="和"delims="均可刪除空白行,即只要""內有內容,即可刪除空白行 (自注:如果缺少delims=項,則默認分隔符為空格)
10.我IP是隨機的,我用以下命令:
ipconfig /all > c:\1.txt
find "IP Address" c:\1.txt >> c:\ip.txt
自注(可用ipconfig /all|find "IP Address")
那么就會得出ip.txt,里面的內容為
---------- C:\1.TXT
IP Address. . . . . . . . . . . . : 192.168.0.5
IP Address. . . . . . . . . . . . : 218.15.245.210
我只是想導出的內容只有IP,也就是說ip.txt里面只有192.168.0.5和218.15.245.210
@echo off
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|find "IP Address"') do (echo IP地址為:%%a)
pause 我IP是隨機的,我用以下命令:
ipconfig /all > c:\1.txt
find "IP Address" c:\1.txt >> c:\ip.txt
自注(可用ipconfig /all|find "IP Address")
那么就會得出ip.txt,里面的內容為
---------- C:\1.TXT
IP Address. . . . . . . . . . . . : 192.168.0.5
IP Address. . . . . . . . . . . . : 218.15.245.210
我只是想導出的內容只有IP,也就是說ip.txt里面只有192.168.0.5和218.15.245.210
@echo off
for /f "tokens=2 delims=:" %%a in ('ipconfig /all^|find "IP Address"') do (echo IP地址為:%%a)
pause
11.用批處理命令刪除文本文件的整行內容
用批處理命令bat解決
例如文本文件a.txt的內容如下:
001,李明,語文,90分
002,李明,數學,70分
003,李明,離散數學,63分
004,李明,英語,60分
005,陳紅,語文,80分
006,陳紅,數學,60分
007,陳紅,離散數學,78分
008,陳紅,英語,65分
求:如果某行有“數學”或者“英語”這個詞,則刪除該行的內容。
要求通過批處理得出如下結果:
001,李明,語文,90分
003,李明,離散數學,63分
005,陳紅,語文,80分
007,陳紅,離散數學,78分
@echo off
findstr /i /v ",數學 英語" "aa.txt">>jg.txt
findstr /iv /c:",數學" /c:"英語" "aa.txt">>jg.txt (此命令與上行等效)
findstr /iv /c:",數學 英語" "aa.txt">>jg.txt (此命令失效,因為沒有“,數學 英語”這樣的內容)
12.不換行顯示文本內容
for /f %%c in (aa.txt) do set /p=%%c>>c.txt<nul
for /f %%a in (aa.txt) do set /p d+=%%a<nul>>c.txt
換行顯示文本內容
for /f %%c in (aa.txt) do echo %%C>>c.txt
13.變量賦值
set hzf=abcd
echo %hzf% 顯示為abcd