windows批處理初學貼出一些命令
在cmd窗口中復制時,右鍵選標記,然后再選擇此時選擇區域就變白了。然后要么直接拖到要粘貼的地方,要么直接按回車存到剪貼板里。
1、循環導入文件夾下面的文件到數據庫中
cd /d D:/Program Files/PostgreSQL/9.2/bin
for /f "delims=" %%i in ('dir /b *.csv') do
(
echo '%%~dpi%%~nxi'>>all.txt
psql -h 192.168.0.231 -U ***-d *** -p 5432 -c "\copy mrs_1 from '%%~dpi%%~nxi' with CSV header"
)
echo '導入數據結束!'
pause
為什么上面的都用的是雙%%?我一直是在命令行中敲的。發現倆%會報錯。才知道命令行中只需要一個百分號就行了。
2、start 調用外部程序。該外部程序在新窗口運行,批處理程序繼續往下執行
例 start explorer f:\
call命令是用來調用具有bat或者cmd后綴的文件名。
3、pushd和popd切換當前目錄
4、md 創建一個文件夾。del刪除文件。rd刪除目錄。md是makedir的簡稱和md作用一樣。
5、dir c:\|find "txt" 打印出c盤下的且包含txt的文件(夾)名
6、echo test ^>1.txt
結果則是:test > 1.txt 所以^是轉義字符。。^還可以用作續行符。
7、這里&兩邊的命令是順序執行的,從前往后執行
dir z:\ & dir y:\ & dir c:\ 當第一個命令執行失敗了,也不影響后邊的命令執行
dir z:\ && dir y:\ && dir c:\ 第一個命令失敗時,后邊的命令也不會執行
在dos下的copy a.txt b.txt /y 相當于將a.txt復制一份存為b.txt不加/y時如果原來存在b.txt會提示是否覆蓋b.txt的提示 還是得按y表示yes
8、||這個命令的用法和&&幾乎一樣,但作用剛好相反:利用||執行多條命令時,當遇到一個執行正確的命令就退出此命令組合,不再繼續執行后面的命令
9、知道別人主機的ip想知道其mac地址 用arp -a ip其實 nbtstat也可以看出來其mac地址nbtstat -A ip這個命令是用來查計算機名的(可以再電腦屬性更改的實名制名字)。
(1)netstat命令是顯示協議統計信息和當前tcp/ip網絡連接的 加上-o后會多顯示一列即跟端口號對應的PID
(2)tasklist /V 顯示的是進程名、端口號、內存使用、用戶名等具體信息。所以可以從netstat中找到pid然后用該pid在tasklist中找到進程名。
(3)刪除某個進程:命令格式:ntsd -c q -p pid 按進程號殺;ntsd -c q -pn ***.exe 按進程名殺;taskkill /pid pid /f 按進程號殺。其中/f是強行殺掉的意思。
10、IF命令
(1)IF [NOT] ERRORLEVEL number command 當errorlevel為0時說明上一句命令的執行結果是正確的。
有的資料上說 這種寫法指errorlevel >= 0時執行命令 若要等于0才執行則用if %errorlevel% == 0 (do something)
(2)IF [NOT] string1==string2 command
當比較string1和string2時如果不想區分大小寫那么就在if 后面加個/i
(3)IF [NOT] EXIST filename command
if中還有一些判斷數字大小的符號
EQU - 等于 NEQ - 不等于 LSS - 小于 LEQ - 小于或等于 GTR - 大于 GEQ - 大于或等于
我覺得還是直接用大于小于號方便。。。
(4)對于if else語句得按下列格式
IF EXIST filename (
del filename
) ELSE (
echo filename missing
)
這個例子里面有兩點必須遵守<1>左括號必須和if或者else在同一行。不然會報語法不正確的提示
<2>else 必須和if中的最后一句在一行。。不然會報else不是內部或外部命令的提示。
11、date 顯示當前日期,提示輸入新日期。如果只想看當前日期不想輸入新日期??梢?加個/t和time的用法一樣
time /t 只顯示當前時間而不提示輸入新時間
12、sort排序命令可以排文件可以排命令結果,一個是用 < 從文件讀,一個是用|排序前面命令的結果
例sort < list.txt > alphlist.txt find "Jones" maillst.txt | sort
sort輸出排序結果到文件中可以利用/o后面加文件 而不用重定向
13、more命令:可以直接單獨用也可以在管道符后面用來一屏屏顯示命令結果
more后面帶/s參數表示把多個空行輸出成一個空行
more 后面的文件可以是多個按空格分開,它會一個文件接一個文件的顯示
當使用more后會出來——More——這時要是輸入=號就會顯示現在顯示到第多少行了.按q會退出.按F會從下一個文件開始顯示.最基本的是空格顯示下一屏,回車顯示下一行
14、find命令:
find [/v] [/c] [/n] "string" [[drive:][path]filename[...]] 省略號表示可以在多個文件中查找
參數
/v 顯示未包含指定字符串的所有行。
/c 只顯示包含指定字符串的行數。
/n 將文件行號置于每行開頭。
/I 指定搜索不區分大小寫。
15、批處理的注釋:有兩種
(1)rem 后面跟的是程序的注釋命令.
(2)::也可以用作注釋,其實如果一個后面緊跟字母或者數字則是用于goto語句跳轉的地方,所以:后面跟非字母或數字都可以用作注釋。
16、echo和@
其中的echo off 和命令前加@,這倆命令如果在cmd窗口中輸就看不出來效果,只能看出來前面的盤符路徑\>不見了全是黑屏了。所以只有在bat文件中用上這倆命令才能看出來效果,因為在執行bat文件時,每一句命令都會先顯示在cmd窗口中然后再出來結果,所以這個時候echo off 或者前面加@就可以看出來只顯示執行結果而沒有命令顯示。
echo off 將以后的命令屏蔽顯示,但它自身無法屏蔽,所以通常在echo off前面要加一個@
17、PAUSE暫停鍵相當于c++里面的#include<stdlib> system(pause);
運行顯示:
請按任意鍵繼續. . .
18、title 用來修改cmd窗口的名字。比如title houjiao 那個黑框的左上角名字就成houjiao了
19、COLOR 后面由兩個連著的十六進制數字構成。第一個十六進制表示cmd窗口的背景顏色,第二個十六進制表示cmd窗口中
0到7是由黑色、藍色、綠色、湖藍、紅色、紫色、黃色、白色
8到F是對應的上述顏色的淡色版
20、set這個命令不僅可以設置環境變量還可以設置自定義變量,還可以進行字符串處理是個硬角色。
(1)set的用法SET [variable=[string]] 或者SET /P variable=[promptString]其中/p指的是promptstring是提示符而不是真正bariable的值。真正的值是需要用戶下來輸入的。跟scanf的作用一樣。那怎么樣設置一個變量用來進行表達式計算呢?用set /A variable+=1(相當于variable=variable+1) 這時會把等于號后面的當表達式而不是字符串。當定義變量后如果要用該變量則需要用%%將變量名夾在中間。
當用/a時 如果等于號后面的是邏輯運算比如&時那不能直接用1&1而應該給&加上雙引號。上面的用法可以用一個例子表示set /p hj=please input expression 按回車后 輸入1"&"1 按回車后 set /a result=%hj% 再按回車。。就會看到結果。
(2)用set處理字符串:
<1>首先可以進行字符串替換 例如先初始化一個變量a:set a= bbs. verybat. cn
將a中的空格刪掉 則可以set %a: =%就行了,解釋一下%a:str1=str2%就是把變量%a%的里的str1全部用str2替換.
<2>其次可以進行字符串截斷 例如先初始化一個變量b:set b=bbs.verybat.cn字符串截斷的全部用法為下面5種可以將~當做截斷字符串的標志:
%b:~1,2% =“bs” 偏移量1,從第二位開始向右取2 位
%b:~-3% =“.cn” 從倒數第三位往后取完。
%b:~3% =“.verybat.cn” 從正數第三位往后取完。(只有一個參數說明后面的參數默認為取到結尾)
%b:~0,-3% =“bbs.verybat” 從開始取到倒數第三個。
%b:~2,-3% =“s.verybat” 偏移為2,從第三個開始取到倒數第三個。
21、變量延遲
假設有這么個bat
@echo off
set a=4
set a=5 & echo %a%
pause
那么結果是4。。。而不是五。這就是變量延遲。指的是變量的值只從該一行命令上面的賦值得來。
至于為什么我也不知道。。所以這時候需要啟用變量延遲,固定的命令是這么寫的setlocal enabledelayedexpansion要結束變量延遲則用 endlocal就可以。
22、各種符號
其中逗號、分號都是和空格的作用一樣,沒事就別用這些了空格就夠了我覺得,而感嘆號是在變量延遲問題中用來包變量的。即把%a%寫成!a!可是我在開啟變量延遲之后還是用的%a%也沒有錯,
反而!a!報錯。。不知道為啥了反正以后都用百分號就行了。
小括號中的命令會被看成是一條命令。可以在for語句和if語句中使用也可以單獨使用。
雙引號是字符串界定符加上雙引號字符串中就可以加空格之類的。
23、for循環
格式:FOR 參數 %%變量名 IN (SET) DO 執行的命令
其中SET指的是相關文件或命令命令用單引號括起來,相關文件用字符串括起來。
for的參數有4個分別為/d /r /l /f
(1)/d 參數:在SET中有通配符*或?時,只是循環執行SET中的文件夾名字而不會執行文件夾中的文件。
(2)/r 參數:這個參數后面得加目錄,同樣當SET中有通配符時他會把/r 后面指定的目錄及其下面的所有子目錄中與set相符合的所有文件名都列舉出來。但是/r 在set中沒有通配符時還會做操作就是將所有含有該文件的目錄都列出來。例如for /r c:\ %%i in (*.exe) do echo %%i
(3)/l參數:其中的SET就需要換成三個用逗號隔開的數字分別代表start,step,end。表示從數字start開始到end結束步長為step來設置變量。比如for /l %%i in (1,1,5) do start cmd就會打開5個cmd窗口。
(4)/f參數:這個參數是讀取文件中最常用的一個也是最復雜的一個
FOR /F ["options"] %variable IN (file-set) DO command [command-parameters]其中file-set是文件名不能有空格
FOR /F ["options"] %variable IN ("string") DO command [command-parameters]其中string表示字符串
FOR /F ["options"] %variable IN ('command') DO command [command-parameters]單引號表示執行命令
option有5個參數用一個例子來說明就是
FOR /F "usebackq eol=; tokens=1,3* delims=, " %%i in ("program files") do echo %%i %%j %%k
其中usebackq參數表示后面雙引號引的是文件名而不是字符串。
eol=;表示跳過以分號開頭的行不讀。
tokens=1,3* 表示按照后面的逗號和空格將一行分為若干段,將第一段賦值給%%i,將第三段賦值給%%j,將后面所有的段賦值給%%k。
delims=, 表示按,和 分割行,其中的空格必須放在最后,否則會報錯。那個*還可以寫成4-10意思是第四段到第十段。
在for中變量可以替換為一些其他的寫法,作用也不一樣,具體的for /? 然后再最后面一屏會看到。經常用的是倆%~dpi其中i是for本來的變量。意思是將%i擴充到一個驅動器號和路徑。如果原來%i是一個文件,則你echo 后就會顯示哪個盤哪個目錄下的文件。
后續學到其他的再進行總結補充。 -jimmy-hou-

浙公網安備 33010602011771號