《Mysql必讀Windows批處理bat基礎知識總結》要點:
本文介紹了Mysql必讀Windows批處理bat基礎知識總結,希望對您有用。如果有疑問,可以聯系我們。
MYSQL入門
MYSQL入門編者按:這兩天在寫bat腳本,這是一個痛苦的周末,來個bat的基礎知識,留著以后慢慢學.
MYSQL入門預定義的變量
下面是些已經被底層定義好可以直接使用的變量:不會出現在 SET 顯示的變量列表中
%CD%?– 擴展到當前目錄字符串.
%DATE%?– 用跟 DATE 命令同樣的格式擴展到當前日期.
%TIME%?– 用跟 TIME 命令同樣的格式擴展到當前時間.
%RANDOM%?– 擴展到 0 和 32767 之間的任意十進制數字.
%ERRORLEVEL%?– 擴展到當前 ERRORLEVEL 數值.
%CMDEXTVERSION%?– 擴展到當前命令處理器擴展名版本號.
%CMDCMDLINE%?– 擴展到調用命令處理器的原始命令行.
%0?bat的完整路徑名如”C:\Windows\system32\xxx.bat”
%1?bat參數1依次類推%2參數2…
%path%?– 當前的環境變量.以分號隔開的路徑列表,路徑可包含空格,可以以’\’結尾, 可以以雙引號包圍之.
MYSQL入門參數%0具有特殊的功能,可以調用批處理自身,以達到批處理本身循環的目的,也可以復制文件自身等等.
MYSQL入門例:最簡單的復制文件自身的方法
MYSQL入門copy %0 d:\wind.bat
MYSQL入門擴展變量
MYSQL入門@ 與%i相關的變量(bat參數或者for循環的%i)
假設文件為C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%0??????? C:\Documents and Settings\jinsun\桌面\ParseSinglePkgs.bat
%~dp0? C:\Documents and Settings\jinsun\桌面\
%cd%?? C:\Documents and Settings\jinsun\桌面
%~nx0?? ParseSinglePkgs.bat
%~n0???? ParseSinglePkgs
%~x0???? .bat
MYSQL入門@ 與%VAR%相關的變量
MYSQL入門%VAR:str1=str2%?? 會將VAR中的str1替換為str2(str2如果為空則可以達到刪除的效果,str1前可以加*,變量%ABC:*B=%是C)
%VAR:~0,-2%????????? 會提取VAR 變量的所有字符,除了最后兩個
%VAR:~2%????????????? 會提取VAR 變量的除前兩個的所有字符
%VAR:~-2%???????????? 會提取VAR 變量的最后兩個
%VAR:~2,5%?????????? 提取從第2個字符開始的5個字符
MYSQL入門在bat文件中,多個命令寫在一行或括號內,如果使用行內或括號內定義或修改的變量,需要啟用延遲變量擴充,用嘆號引用變量.
MYSQL入門bat文件中用 setlocal enabledelayedexpansion 啟用延遲變量擴充,命令提示符窗口啟用延遲變量擴充,用 cmd /v:on
MYSQL入門ren命令中的文件名最好加引號,防止文件名包含空格等特殊字符造成的錯誤.
MYSQL入門cd /d %~dp0
MYSQL入門批處理文件中的一條語句
意思是 更改當前目錄為批處理本身的目錄
MYSQL入門比如你有個批處理a.bat在D:\qq文件夾下
a.bat內容為
cd /d %~dp0
在這里
cd /d 表示直接轉換到后面的路徑,否則如果切換盤符,就需要再輸入盤符才能切換路徑
cd /d %~dp0的意思就是cd /d d:\qq
%0代表批處理本身 d:\qq\a.bat
~dp是變量擴充
d既是擴充到分區號 d:
p就是擴充到路徑 \qq
dp就是擴充到分區號路徑 d:\qq
MYSQL入門%0代指批處理文件自身
MYSQL入門%~d0 是指批處理所在的盤符
%~dp0 是盤符加路徑
cd %~dp0 就是進入批處理所在目錄了
MYSQL入門%cd%
MYSQL入門%cd%代表當前執行批處理文件的路徑(當前路徑)
MYSQL入門echo %cd%
MYSQL入門%CD% ?當前文件目錄,不顯示文件名,切通過其找到其他文件
MYSQL入門%0 ? ?當前文件本身,包含完整路徑名和文件名
MYSQL入門如 “C:\Windows\system32\xxx.bat”,是一個路徑字符串,有引號
MYSQL入門*.*??代表所有文件
MYSQL入門>和>>它們的作用都是改變各種提示信息的輸出方向,把提示信息輸出到指定的地方去——各種提示信息默認是輸出到屏幕上去的.
MYSQL入門單個的>表示以覆蓋方式重定向提示信息,也就是說如果目的地原來有內容,將把原來的內容清除掉,用新內容填充;
MYSQL入門>>表示以追加的方式重定向提示信息,也就是說,如果目的地原來有內容,原有的內容將保持不變,在原有內容之后追加新內容.
MYSQL入門例如:假設d:\test.txt中的內容是:I Love batch.那么,在cmd窗口中,分別使用如下兩條語句:echo me,too>d:\test.txt和echo me,too>>d:\test.txt,將會發現,使用第一條語句之后,test.txt中只有一行內容:me,too,而使用第二條語句之后,test.txt中將有兩行內容,分別是I Love batch和me,too.
MYSQL入門例如:tree /?>help.txt,這條命令語句就把 tree 命令的幫助信息重定向到了help.txt文件中,
MYSQL入門help>nul 就把 help 命令的提示信息重定向到了空設備中去(nul表示空設備).
MYSQL入門| ? 命令管道符
MYSQL入門格式:第一條命令 | 第二條命令 [| 第三條命令…]
MYSQL入門將第一條命令的結果作為第二條命令的參數來使用,記得在unix中這種方式很常見.
MYSQL入門例如:
MYSQL入門dir c:\|find “txt”
MYSQL入門以上命令是:查找C:\所有,并發現TXT字符串.
MYSQL入門md
MYSQL入門如果要創建的文件夾帶有空格或&,需要用引號把文件夾名括起來,例如:md “test abc”、md “abc&xyz”.
MYSQL入門如果不使用引號,又會帶來什么后果呢?
MYSQL入門1、如果文件夾名帶空格,那么,md test abc 語句會在當前目錄下創建test和abc這兩個文件夾;利用這個特點,如果要創建abc def xyz這三個文件夾,直接使用 md abc def xyz 就行了,而無需連寫三條md語句.
MYSQL入門當然,md abc;def;xyz或者md abc,def,xyz 這樣的寫法也是可以的.
MYSQL入門2、如果文件夾名中含有&,那么,md abc&xyz 會創建abc這個文件夾,并提示說:’xyz’不是內部或外部命令,也不是可運行的程序或批處理文件,這是因為,&是復合語句的連接符號,它把前后兩部分視為兩條子語句了.
MYSQL入門忠告:如果文件夾名含有特殊符號,請不要忘記使用雙引號!
MYSQL入門md創建中級目錄.也就是說,md a\b\c這樣的命令,可以在當前目錄下建立文件夾a,然后,在a下建立文件夾b,b之下再建立文件夾c
MYSQL入門echo on/off
MYSQL入門on 和 off 都是echo 的關鍵字,所謂關鍵字就是系統規定、有特殊用途的字符.
MYSQL入門echo on 是打開回顯,echo off 是關閉回顯.
MYSQL入門系統默認是echo on,所以每次為了關閉回顯,都會在代碼的行首加上echo off,加以關閉.
MYSQL入門不關閉回顯,連執行的命令符都會顯示出來,所以一般會關閉.
MYSQL入門前面加上@又是為什么?
MYSQL入門echo off只能關閉 echo off后面的代碼的回顯,但不能關閉自身的回顯.所以需要加上@關閉自身.
MYSQL入門echo.
MYSQL入門echo 后加一點表示換行,真奇葩的設計.
MYSQL入門findstr默認是區分大小寫的(跟find命令一樣)
MYSQL入門findstr /vm “^teststring” *.txt
MYSQL入門findstr /v /m “teststring” *.txt
MYSQL入門/i?? ? ? ?不區分大小寫 (/ignore)
MYSQL入門/V ? ? ? 只打印不包含匹配的行.
MYSQL入門/M ? ? ? 如果文件含有匹配項,只打印其文件名.
MYSQL入門啟動一個程序?
MYSQL入門call與start區別
MYSQL入門start upload.bat
MYSQL入門不會等upload.bat執行完再執行下一條, 如此可實現同時執行多條命令.
MYSQL入門call upload.bat
MYSQL入門call 命令 是要等調用的程序結束以后才運行下面的命令.
MYSQL入門特殊符號
MYSQL入門&:第一條命令 & 第二條命令 [& 第三條命令…]
MYSQL入門用這種方法可以同時執行多條命令,而不管命令是否執行成功.
MYSQL入門&&:第一條命令 && 第二條命令 [&& 第三條命令…]
MYSQL入門當碰到執行出錯的命令后將不執行后面的命令,如果一直沒有出錯則一直執行完所有命令.
MYSQL入門||:第一條命令 || 第二條命令 [|| 第三條命令…]
MYSQL入門當碰到執行正確的命令后將不執行后面的命令,如果沒有出現正確的命令則一直執行完所有命令;
MYSQL入門Sql代碼??
MYSQL入門執行后在當前路徑下就生成for.txt、set.txt和shift.txt三個文件,里面分別記錄了for命令、set命令和shift命令的幫助信息.
MYSQL入門1.Echo 命令
打開回顯或關閉請求回顯功能,或顯示消息.
如果沒有任何參數,echo 命令將顯示當前回顯設置.
MYSQL入門語法
echo [{on|off}] [message]
Sample:
@echo off / echo hello world
在實際應用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命令到特定格式的文件中.這將在以后的例子中體現出來.
MYSQL入門2.@ 命令
表示不顯示@后面的命令
在入侵過程中(例如使用批處理來格式化敵人的硬盤)自然不能讓對方看到你使用的命令啦.
Sample:@echo off
@echo Now initializing the program,please wait a minite…
@format X: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個參數給我們,效果和/y是一樣的.)
MYSQL入門3.Goto 命令
指定跳轉到標簽,找到標簽后,程序將處理從下一行開始的命令.
語法:goto label (label是參數,指定所要轉向的批處理程序中的行.)
Sample:
MYSQL入門Ruby代碼
MYSQL入門標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto命令就是根據這個:來尋找下一步跳到到那里.最好有一些說明這樣你別人看起來才會理解你的意圖啊.
MYSQL入門4.Rem 命令
注釋命令,在C語言中相當與/*——–*/,它并不會被執行,只是起一個注釋的作用,便于別人閱讀和你自己日后修改.
Rem Message
Sample:
@Rem Here is the description.
MYSQL入門注釋可以使用Rem,也可以使用雙冒號即::
MYSQL入門5.Pause 命令
運行 Pause 命令時,將顯示下面的消息:
Press any key to continue . . .
MYSQL入門Ruby代碼
MYSQL入門在這個例子中,驅動器 A 中磁盤上的所有文件均復制到d:\back中.顯示的注釋提示您將另一張磁盤放入驅動器 A 時,pause 命令會使程序掛起,以便您更換磁盤,然后按任意鍵繼續處理.
MYSQL入門6.Call 命令
MYSQL入門call命令用來從一個批處理腳本中調用另一個批處理腳本
MYSQL入門如果在腳本或批處理文件外使用 Call,它將不會在命令行起作用.
MYSQL入門語法
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
參數
[Drive:}[Path] FileName
指定要調用的批處理程序的位置和名稱.filename 參數必須具有 .bat 或 .cmd 擴展名.
MYSQL入門Ruby代碼
MYSQL入門7.start 命令
調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用.
MYSQL入門入侵常用參數:
MIN 開始時窗口最小化
SEPARATE 在分開的空間內開始 16 位 Windows 程序
HIGH 在 HIGH 優先級類別開始應用程序
REALTIME 在 REALTIME 優先級類別開始應用程序
WAIT 啟動應用程序并等候它結束
parameters 這些為傳送到命令/程序的參數
執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示.如果在命令腳本內執行,該新行為則不會發生.
MYSQL入門8.choice 命令
choice 此命令可以讓用戶輸入一個字符,從而運行不同的命令.使用時應該加/c:參數,c:后應寫提示可輸入的字符,之間無空格.它的返回碼為1234……
MYSQL入門如: choice /c:dme defrag,mem,end
將顯示
defrag,mem,end[D,M,E]?
MYSQL入門Ruby代碼
MYSQL入門此文件運行后,將顯示 defrag,mem,end[D,M,E]? 用戶可選擇d m e ,然后if語句將作出判斷,d表示執行標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最后都以goto end將程序跳到end標號處,然后程序將顯示good bye,文件結束.
MYSQL入門9.If 命令
if 表示將判斷是否符合規定的條件,從而決定執行不同的命令. 有三種格式:
1、if “參數” == “字符串”??待執行的命令
MYSQL入門檢測字符串
MYSQL入門(注意,用if檢測字符串是否相等的時候,后面用的不是“=”,而是“==”)
參數如果等于指定的字符串,則條件成立,運行命令,否則運行下一句.(注意是兩個等號)
如if “%1″==”a” format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms
MYSQL入門檢測數值:(注意,批處理中大于符號不能用:“>”,而用”gtr”,其它的也類似)
MYSQL入門比較運算符一覽:
MYSQL入門EQU – 等于
MYSQL入門NEQ – 不等于
MYSQL入門LSS – 小于
MYSQL入門LEQ – 小于或等于
MYSQL入門GTR – 大于
MYSQL入門GEQ – 大于或等于
MYSQL入門Sql代碼
MYSQL入門、if exist 文件名? 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句.
如if exist config.sys edit config.sys
MYSQL入門3、if errorlevel / if not errorlevel 數字? 待執行的命令
如果返回碼等于指定的數字,則條件成立,運行命令,否則運行下一句.
MYSQL入門說明:環境變量errorlevel的初始值為0,當一些命令執行不成功,就會返回一個數值,如:1?,2?等
如if errorlevel 2 goto x2
DOS程序運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1.
MYSQL入門常用命令的返回值及其代表的意義
MYSQL入門IF [NOT] ?ERRORLEVEL number ? do command
MYSQL入門IF [NOT] ?string1==string2 ? do command
MYSQL入門IF [NOT] ?EXIST filename ? do command
MYSQL入門10.for 命令
MYSQL入門for 命令是一個比較復雜的命令,主要用于參數在指定的范圍內循環執行命令.
在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable
MYSQL入門在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable而不要用 %variable.變量名稱是區分大小寫的,所以 %i 不同于 %I
MYSQL入門for /f %%i in (a.txt) do echo %%i
MYSQL入門//這個會顯示a.txt里面的內容,因為/f的作用,會讀出a.txt中的內容.
MYSQL入門for %%i in (a.txt) do echo %%i
MYSQL入門//而這個只會顯示a.txt這個名字,并不會讀取其中的內容.
MYSQL入門for %%a in (c:\*.*) do echo %%a
MYSQL入門::顯示C盤根目錄下所有非隱藏、非系統屬性文件
MYSQL入門::只顯示文件,不顯示文件夾
MYSQL入門一、/d
MYSQL入門(只搜索目錄,不搜索文件)
MYSQL入門格式:FOR /D %variable IN (set) DO command [command-parameters]
MYSQL入門for /d %%i in (c:/*) do echo %%i ?–顯示c盤根目錄下的所有目錄
MYSQL入門for /d %%i in (???) do echo %%i ? –顯示當前目錄下名字只有1-3個字母的目錄(注意是目錄)
MYSQL入門二、/R
MYSQL入門(只搜索文件,不搜索目錄)
MYSQL入門(搜索指定路徑及所有子目錄中與set相符合的所有文件)
MYSQL入門格式:FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
MYSQL入門for /r c:/ %%i in (boot.ini) do echo %%i
MYSQL入門–枚舉了c盤所有目錄,找到含有boot.ini的路徑并顯示
MYSQL入門for /r d:/backup %%i in (1) do echo %%i
MYSQL入門–枚舉d/backup目錄,現在當前路徑和當前路徑下所有文件夾,不過后面帶了個1
MYSQL入門d:\backup\1
MYSQL入門for /r c:/ %%i in (boot.ini) do if exist %%i echo %%i
MYSQL入門–很好的搜索命令,列舉boot.ini存在的目錄
MYSQL入門三、/L?
MYSQL入門(以增量形式從開始到結束的一個數字序列.可以使用負的 Step)
MYSQL入門格式:FOR /L %variable IN (start,step,end) DO command [command-parameters]
MYSQL入門該集表示以增量形式從開始到結束的一個數字序列.可以使用負的 Step
MYSQL入門示例:
MYSQL入門for /l %%i in (1,1,5) do @echo %%i ?–輸出1 2 3 4 5
MYSQL入門for /l %%i in (1,2,10) do @echo %%i ?–輸出1,3,5,7,9
MYSQL入門for /l %%i in (100,-20,1) do @echo %%i ?–輸出100,80,60,40,20
MYSQL入門for /l %%i in (1,1,5) do start cmd ?–打開5個CMD窗口
MYSQL入門for /l %%i in (1,1,5) do md %%i ?–建立從1~5共5個文件夾
MYSQL入門for /l %%i in (1,1,5) do rd /q %%i ?–刪除從1~5共5個文件夾
MYSQL入門setlocal 與 變量延遲
MYSQL入門例1:
MYSQL入門@echo off
MYSQL入門set a=4
MYSQL入門set a=5 & echo %a%
MYSQL入門pause
MYSQL入門結果:4
MYSQL入門解說:為什么是4而不是5呢?在echo之前明明已經把變量a的值改成5了?
MYSQL入門(set a=5
MYSQL入門echo %a%
MYSQL入門::這種情況a直接是5
MYSQL入門)
MYSQL入門讓我們先了解一下批處理運行命令的機制:
MYSQL入門批處理讀取命令時是按行讀取的(另外例如for命令等,其后用一對圓括號閉合的所有語句也當作一行),在處理之前要完成必要的預處理工作,這其中就包括對該行命令中的變量賦值.我們現在分析一下例1,批處理
MYSQL入門在運行到這句“set a=5 & echo %a%”之前,先把這一句整句讀取并做了預處理——對變量a賦了值,那么%a%當然就是4了!(沒有為什么,批處理就是這樣做的.)
MYSQL入門而為了能夠感知環境變量的動態變化,批處理設計了變量延遲.簡單來說,在讀取了一條完整的語句之后,不立即對該行的變量賦值,而會在某個單條語句執行之前再進行賦值,也就是說“延遲”了對變量的賦值.
MYSQL入門那么如何開啟變量延遲呢?變量延遲又需要注意什么呢?舉個例子說明一下:
MYSQL入門例2:
MYSQL入門@echo off
MYSQL入門setlocal enabledelayedexpansion
MYSQL入門set a=4
MYSQL入門set a=5 & echo !a!
MYSQL入門pause
MYSQL入門結果:5
MYSQL入門解說:啟動了變量延遲,得到了正確答案.變量延遲的啟動語句是“setlocal enabledelayedexpansion”,并且變量要用一對嘆號“!!”括起來(注意要用英文的嘆號),否則就沒有變量延遲的效果.
MYSQL入門分析一下例2,首先“setlocal enabledelayedexpansion”開啟變量延遲,然后“set a=4”先給變量a賦值為4,“set a=5 & echo !a!”這句是給變量a賦值為5并輸出(由于啟動了變量延遲,所以批處理能夠感知到動態變化,即不是先給該行變量賦值,而是在運行過程中給變量賦值,因此此時a的值就是5了).
MYSQL入門再舉一個例子鞏固一下.
MYSQL入門例3:
MYSQL入門@echo off
MYSQL入門setlocal enabledelayedexpansion
MYSQL入門for /l %%i in (1,1,5) do (
MYSQL入門set a=%%i
MYSQL入門echo !a!
MYSQL入門)
MYSQL入門pause
MYSQL入門結果:
MYSQL入門1
MYSQL入門2
MYSQL入門3
MYSQL入門4
MYSQL入門5
MYSQL入門(若不加延遲變量,則會輸出幾個!a!字符)
MYSQL入門解說:本例開啟了變量延遲并用“!!”將變量擴起來,因此得到我們預期的結果.如果不用變量延遲會出現什
MYSQL入門么結果呢?結果是這樣的:
MYSQL入門ECHO 處于關閉狀態.
MYSQL入門ECHO 處于關閉狀態.
MYSQL入門ECHO 處于關閉狀態.
MYSQL入門ECHO 處于關閉狀態.
MYSQL入門ECHO 處于關閉狀態.
MYSQL入門即沒有感知到for語句中的動態變化.
MYSQL入門文/uule
MYSQL入門原文出處——http://uule.iteye.com/blog/2076859
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/3837.html