dos命令詳解筆記(2)

9.Choice
Choice /c:參數 參數表示可輸入的字符,由set /p代替,已經很少用
10.For
循環命令
FOR [%%f] in (集合) DO [命令]
/d 僅對目錄操作有效,對文件無效
例:@echo off
for /d /r %%i in (*) do @echo %%i
::列出當前目錄中的所有未隱藏的目錄,文件不操作
pause
/r 遞歸(即對當前目錄操作,其下的所有子目錄也進行操作)
例:@echo off
for /d /r %%i in (*) do @echo %%i
::列出當前目錄及其子目錄中的所有未隱藏的目錄,文件不操作
pause
/l 迭代數值範圍
例:@echo off
for /l %%i in (1,1,5) do @echo %%i
pause
/f 讀取文本中的每一行內容賦值給變量或將命令的執行結果返給變量(很常用)
例:有一文本test.txt,內容爲:
姓名 關係
; 顯示對應關係
張儀 勞動
得 顧主
@echo off
for /f "eol=; tokens=1,2 delims= " %%a in (c:\test.txt) do @echo %%a %%b
::讀取文本的內容賦值給變量%%a,之後顯示文本中的兩列內容,帶分號的行不顯示
::eol=;表示忽略以分號;開頭的行,即使不寫該參數,也默認執行該參數
::tokens=1,2表示打印/顯示文本的第1,2列內容
::delims= 表示以空格爲分隔符
Pause
例:@echo off
for /f "eol=; tokens=1,2 delims= " %%a in (‘net user’) do @echo %%a %%b
~I 表示刪除引號
刪除首尾的引號
刪除開頭的引號
尾部的和中間的引號不刪除
例:有一test.txt文檔,內容如下:
“afds”
“daf
Dfs”
Afd”dfa
執行以下代碼
@echo off
for /f %%a in (c:\test.txt) do @echo %%~a
pause
結果如下:
afds
daf
Dfs”
Afd”dfa
%~fi 表示將%i擴展到一個完全合格的路徑
例:@echo off
for /f %%i in ('dir /b') do @echo %%~fi
pause
%~di 表示將%i 擴展到一個磁盤驅動器號
%~pi 表示將%i擴展到路徑
%~ni 表示將%i擴展到文件名
%~xi 表示將%i擴展到文件後綴
%~si 表示將%i擴展到文件短名
例:@echo off
for /f %%i in ('dir /b') do @echo %%~si
pause
如果根目錄有documents and setting,則只顯示documents這樣形式的文件短名
%~ai 表示將%i擴展到文件屬性
%~ti 表示將%i擴展到文件的大小和日期
%~zi 表示將%i擴展到文件的大小
%~$path:I 表示在指定的path下搜索指定的文件
例:@echo off
for /f "delims=" %%i in ("ping.exe") do @echo %%~$path:i
::曾經犯的錯誤,括號裏使用雙引號而不是單引號
pause
11.,
相當於空格
例:在CMD下執行dirc:會出現錯誤提示,使用dir,c:則不會
12. “ “
界定符,常用來界定“帶空格的目錄”
例:在CMD下執行dir c:\documents and setting會出現錯誤提示,使用dir “c:\document and setting”則不會
13. ^
轉義字符,取消特殊符號的作用
例:如果想將>這個特殊符號寫到文本文件中去
echo > >test.txt 錯誤
Echo ^> >test.txt正確,取消了>特殊符號的輸出重定向功能
14. &
命令連接字符,不管&之前的命令執行正確與否,其後的命令都會順序執行
15. &&
命令連接字符,只有&&之前的命令執行正確,其後的命令纔會執行
16. ||
命令連接字符,只有||之前的命令執行錯誤,其後的命令纔會執行
17. |
管道命令
把前一個命令的輸出結果作爲下一個命令的輸入
18. >
輸出重定向命令
把前一個命令的輸出結果寫到後面的設備中去,後面設備的內容被覆蓋
19. >>
輸出重定向命令
把前一個命令的輸出結果寫到後面的設備中去,後面設備的內容不被覆蓋
20. <
輸出重定向命令
把後一個設備的指定內容作爲前一個設備的輸入
21. *和?
通配符
*表示任意多個字符
?表示任意一個字符
22. 概念理解:變量擴展與延遲變量擴展
變量擴展:在批處理的執行中,用變量的值替換變量的名的過程。
延遲變量擴展(使用標誌setlocal enabledelayedexpansion)
例:@echo off
for /l %%i in (1,1,5) do (
set var=%%i
echo %var%
)
Pause
::代碼解讀,該代碼段的執行結果顯示“5個echo處於關閉狀態”
::爲什麼呢?
::因爲CMD執行批處理時首先是將每一個命令行讀入內存進行匹配
::匹配的含義是檢查命令行是否有語句格式的錯誤,而不是執行命令行
::紅色代碼是一行命令行
::變量var首先進行匹配而不能執行,所以此時var還沒有被賦值,是空值
例:@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,5) do (
set var=%%i
echo !var!
)
Pause
::代碼解讀,該代碼段的執行結果顯示“數列形式的1 2 3 4 5”
::爲什麼該代碼段執行正確?
::因爲它使用了“延遲環境變量擴展”
::延遲環境變量擴展中的變量用“! !”而不是“% %”
::使用延遲環境變量擴展的目的是先執行1次命令行在進行匹配
::因此,變量var先被賦值爲1,之後匹配命令行
同理:
set var=test & echo %var% 會出現錯誤提示:echo處於關閉狀態
setlocal enabledelayedexpansion
set var=test & echo !var! 被正確執行
23.;
當命令相同時,可以將不同目標分隔開
例:dir c:\;d:\;e:\相當於dir c:\ dir d:\ dir e:\
補充:
autoexec.bat :開機時自動運行的批處理文件
winstart.bat :選擇進入windows狀態時自動運行的批處理文件
Dosstart.bat :在windows下重新啓動進入MS-DOS時自動運行的批處理文件
區別:執行的時間段不同
四、技巧集合
1.*.*可用.代替
Del *.* equ del .
2.無論命令是否正確執行,都屏蔽它的顯示信息可將命令重定向到空設備NUL上
例:dir >nul 2>nul
3.向文本中添加內容
Type con >>文本名 REM 已測試,按F6鍵或CTRL+Z停止輸入
Type con >filename equ copy con filename
type nul>filename 表示將文件內容清空,但filename的屬性不能是隻讀和隱藏文件
4.DOS下的指法練習
Copy con nul
5.Regedit /e
導出註冊表,例:regedit /e test,將註冊表數據庫導出到文件test.reg中
導入註冊表,例:regedit/c test.reg,將test.reg導入到註冊表中
例:regedit test.dat,將test.dat導入到註冊表中
6.在“運行”或CMD下,直接運行“hh ntcmds.chm”,會啓動“命令行參考”窗口,方便自學DOS命令
7.2>nul
2表示錯誤消息句柄
8.讓程序一個接一個執行
start /w 第一個程序
start 第二個程序
9.查看與本地機器連接的用戶列表
Net session
清除已經與本地連接的用戶temp
Net session \\temp /delete
10.在子網內,ping不通網關,但可以與其它機器正常ping通
解決思路:獲得網關正確的MAC地址,之後執行
arp -a 網關IP 網關MAC地址
11.新建一個文件
type nul>new.txt
例:建立批處理文件的方法總結
a. type nul>test.bat (test.bat空內容,需要進入編輯內容)
b. copy con test.bat
c. echo dir c:>test.bat
echo dir d:>>test.bat
d. edit test.bat
edlin test.bat
e. 在Windows下建立文本文件再改擴展名(需要進入編輯內容)
12.命令提示符被禁止
解決思路:reg delete HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows /f >nul
13.批處理執行遇到“bad command or filename”這樣的錯誤提示該如何理解?
命令錯誤;
命令正確,但不在當前目錄和PATH設置的搜索路徑內;
批處理文件內容中有COMMAND無法解釋的字符。
14.在用批處理編寫菜單時,不要用特殊符號,如:| ,會引起歧義,造成錯誤。
15.想同別人QQ,可借鑑如下代碼:Set/p qq=請輸入你想和他/她聊的QQ號碼(然後回車):
start tencent://Message/?Uin=%qq%
16.如何在批處理中加空行
@echo off
echo first^

echo second
rem ^是轉義字符,可以將空行轉義,其實自己也不太懂,但這個方法可行?
17.批處理中如何調用vbs文件(未測試)
start "" a.vbs 或 start c:\a.vbs
批處理中如何安裝inf文件(在“工具”“文件夾選項”“文件類型”高級下查看“編輯”獲取相關內容)
rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 c:\b.inf
18.如果用Cacls把硬盤鎖定了的解決方法
Cacls D: /t /c /g dfdgdfghfh:f rem 解鎖D盤
19.設置本機“用戶帳戶”操作
control userpasswords2
五、斷章取義
1.@echo msgbox "下載完了",4096 >> e:\test.vbs
start e:\test.vbs
REM 4096的含義是:系統模式:在用戶響應消息框前,所有應用程序都被掛起
2.在批處理中加彈出窗口
a、Msg %username% /time:5 “hello,zgk”
REM 需TermService服務支持;/time:5表示彈出窗口停留時間;“hello,zgk”表示彈出窗口的內容。
b、net send %computername% “彈出窗口顯示內容” >nul
REM 需message信使服務支持
c、利用系統自帶的mshta程序
利用vbscript自帶的msgbox函數顯示
mshta vbscrip:msgbox(“彈出窗口具體內容顯示”,64,”彈出窗口標題”)(windows.close)
REM 64表示彈出窗口停留時間,windows.close表示停留64秒後關閉窗口
d、利用vbscript的popup功能
mshta vbscript:CreateObject("Wscript.Shell").popup("窗口顯示內容",7,"窗口標題",64)(window.close)
e、mshta javascript:window.alert("警告窗口信息");window.close()
f、利用javascript的popup功能
mshta "javascript:new ActiveXObject('WScript.Shell').popup('Hello,lxmxn',7,'batch script',64);window.close();"
g、利用javascript的confirm功能
mshta javascript:confirm("ha");window.close()
3、不斷彈出窗口的代碼
@echo off
Start notepad.exe
%0
Rem 試了一下,確實挺狠,只有重新啓動機器
4、設定循環次數啓動某程序或命令
@echo off
:loop
If not exist c:\test.txt echo. >c:\test.txt &goto err1
If not exist c:\test1.txt echo. >c:\test1.txt &goto err1
If not exist c:\test2.txt echo. >c:\test2.txt &goto err1
If not exist c:\test3.txt echo. >c:\test3.txt &goto err1
:err1
Start notepad.exe
Goto loop
Rem 其實還可以用其它方法實現,只爲學習!
5、記錄登陸計算機時間的批處理
@echo off
Date /t >record.txt
Time /t >>record.txt
Attrib +s +h record.txt
Attrib +s +h record.bat
最後,把record.bat加入到註冊表中的如下位置:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
"Userinit"="C:\\WINDOWS\\system32\\userinit.exe,record.bat,"
注意:根據record.bat的實際路徑書寫,記住,它後面的逗號,不能不寫!
9、隱藏運行批處理文件時“一閃而過的CMD窗口畫面”
方法一:利用JS代碼
new ActiveXObject('WScript.Shell').Run('cmd /c 隱藏的.bat',0);
方法二:利用VB代碼
Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c felix.bat",vbhide
方法三:利用VB代碼
CreateObject("WScript.Shell").Run "cmd /c felix.bat",0
10、將某個文件拷貝到某個磁盤所有目錄包括子目錄下
@echo off
for /r D: %%i in (.) do copy /y 01.txt "%%i"
pause
REM 將01.txt拷貝到D盤下的所有目錄
11、如何更乾淨的清除垃圾文件
關注 cookies、temp、tempor~1、history等目錄和win386.swp和註冊表信息
12、安靜模式運行程序的腳本代碼
On Error Resume Next
set wshshell=createobject("wscript.shell")
a=wshshell.run ("文件名",0)
rem 其中的文件名就是要運行的程序,0就是程序運行時不顯示運行窗口
13、刪除found.001/found.002等垃圾文件的批處理代碼,不錯!
for %%a in (c d e f g) do (
for /r %%a:\ %%i in (FOUND.00*) do (rd /s /q %%i >nul 2>nul)
)
14、清除重複行批處理代碼
@echo off
for /f "delims=" %%i in (a.txt) do (
findstr /c:"%%i" b.txt 2>nul||echo %%i>>b.txt
)
Pause
rem 爲何能實現?
rem 比如a.txt內容爲“張三 李四 張三”三行,那麼在將張三賦給變量%%i,後
rem 再執行在b.txt中查找“張三”,沒有找到說明第2行語句前半段錯誤,所以
rem ||後的命令得以執行,那麼第2次將“張三”賦給%%i再在b.txt中查找張三
Rem 就能夠查到,語句正確,後者命令就不能執行,不知解釋的是否正確
17、通過批處理修改註冊表中的文件類型進而實現“某類型文件無法被打開”?
@echo off
reg add HKCR\.bat /f /ve /d bat >nul 2>nul
reg add HKCR\.cmd /f /ve /d cmd >nul 2>nul
echo.
echo 啊哦,bat/cmd文件無法打開或者編輯了!
pause >nul
Rem bat和cmd後綴類型的文件就無法被打開了,如果需要打開它們可恢復註冊表,rem 當然前提是有註冊表備份了
六、概念理解
1.什麼是MD5:MD5的全稱是Message-Digest Algorithm 5(信息-摘要算法),它能將一串隨機長度的信息(當然也包括文件)通過其加密函數算法生成一個惟一的128位值,相同信息的MD5值也是相同的,反之,文件即使略有改動,其MD5值也會產生變化。因此,只需比較文件的MD5值,就能知道文件是否經過改動了。
七、DEBUG的學習
H
:代表十六進制,DEBUG使用的是H,通過DEBUG可以建立工具用於批處理的使用。
學習示例:
在CMD下建立一“打印屏幕內容的工具”
Debug scrprint.com
rem scrprint.com是即將要建立程序或者說是工具
-a 100
rem –是debug的輸入標誌, “a 100”表示在以十六進制地址100所指定的地址輸入命令
0b06:0100 100 int 5
rem 輸入命令int 5,“int 5”表示將打印屏幕內容
0b06:0102 mov ah,4c
0b06:0104 int 21
rem 以上兩條命令是表示通知MS-DOS,結束程序
0106 按ENTER
-r cx
rem cx是Debug用來存放程序大小的寄存器
:6
rem 6是該程序的大小,計算程序大小的方法是最後一行地址0106減去第一行地址0100,是6個字節
-w
rem 將程序寫入到磁盤中
-q
Rem 退出MS-DOS

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章