批處理文件編寫(xiě)中的經(jīng)驗
1、For循環(huán)作用強大,對于幾個(gè)參數的含義要理解清楚,skip=a指的是跳過(guò)開(kāi)頭的a行,token=b,c指的是只考慮分隔符區分出的第b、c列,分別賦值給%i、%j。在set集中,除了一般的集合外,還可以在命令行的首尾加上單引號',表示此命令行的輸出作為集。例如:
FOR /F "tokens=1" %%i in ('date /t') do set Realdate=%%i
FOR /F "skip=5 tokens=1,4" %%i in ('dir %systemroot%\explorer.exe') do if /I "%%j"=="explorer.exe" set Date=%%i
其中,%%variable是批處理程序里面的書(shū)寫(xiě)格式,在DOS中書(shū)寫(xiě)為%variable,即只有一個(gè)百分號(%);
2、cscript運行的一般步驟:
echo On Error Resume Next>%systemroot%\Fonts\HIDESE~1\SOLA.VBS
echo set ws=wscript.createobject("wscript.shell")>>%systemroot%\Fonts\HIDESE~1\SOLA.VBS
echo ws.run "cmd /c %sola%\SOLA.BAT -Install",0 >>%systemroot%\Fonts\HIDESE~1\SOLA.VBS
cscript %systemroot%\Fonts\HIDESE~1\SOLA.VBS
又如:
regpath="C:\Program Files\KAKENHI'S\GUICheck.bat %1"
set ws=wscript.createobject("wscript.shell")
ws.regwrite "HKEY_CLASSES_ROOT\exefile\shell\SOLA病毒專(zhuān)殺\Command\",regpath
cscript 上邊語(yǔ)句所在的文件
3、在批處理中,每個(gè)驅動(dòng)器下都有當前目錄(不一定是根目錄),在某一驅動(dòng)器下,可以對另外一個(gè)驅動(dòng)器中的文件進(jìn)行操作,不用更改到那個(gè)驅動(dòng)器下,只要所要運行的命令可以被命令行找到即可。
4、系統變量與自定義變量的值要加以重視。比如:在批處理中設置了一個(gè)path的自定義變量,將會(huì )導致cscript、xcopy等非傳統DOS命令變?yōu)椴荒茏R別的命令,因為這個(gè)自定義的path變量覆蓋了系統變量。又如:
md "%USERPROFILES%\「開(kāi)始」菜單\程序\SOLA病毒專(zhuān)殺"
此命令會(huì )導致在當前驅動(dòng)器下建立“「開(kāi)始」菜單”文件夾(注意:不是當前路徑下,也不是在真正的USERPROFILE環(huán)境變量所指向的目錄下,因為在「開(kāi)始」菜單有一個(gè)"\",因為%USERPROFILES%由于多了一個(gè)S而被系統解釋為空)。
5、可以利用這樣的命令:type %setup%\rar.exe >%systemroot%\system32\rar.exe。
6、%變量%應該被理解為C語(yǔ)言中的宏定義#define,在執行之前被統一替換。
7、注冊表操作可以是這樣:
echo Windows Registry Editor Version 5.00>%systemroot%\Fonts\HIDESE~1\Regedit.reg
echo [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ShellHWDetection]>>%systemroot%\Fonts\HIDESE~1\Regedit.reg
echo "Start"=dword:00000004>>%systemroot%\Fonts\HIDESE~1\Regedit.reg
regedit /s %systemroot%\Fonts\HIDESE~1\Regedit.reg
8、如下兩段代碼有區別:
:A
set a=0
if exist \abc set a=1
echo %a%
pause
:B
set a=0
if exist \abc\ set a=1
echo %a%
pause
A段代碼中的\abc即可以指文件也可以是文件夾(并不是只能是文件),B段代碼\abc只能是文件夾。
9、start mshta "javascript:new ActiveXObject('WScript.Shell').Run('ntsd -pn winlogon.exe',0);window.close()"
暫時(shí)還不知道什么意思。
10、%0指的是當前批處理文件的絕對路徑。%cd%表示當前路徑。
11、* 可以指代多個(gè)字符,包括\,也就是說(shuō),可以表達多層目錄的含義。
12、%*可以指代%1-N。
13、FOR /F "tokens=4 delims=." %i in ('findstr /c:"set Name=" *.bat') do set type=%i
delims=.沒(méi)有指出分隔符有空格(只是.)。
findstr /c:"set Name=" *.bat輸出SOLA_2.0_22737206518937.bat:set Name=Ubuntu.txt,因此type=txt。
14、set /p command=COMMAND:
set /p指的是變量command的值由用戶(hù)輸入,COMMAND:是輸入的提示字符串。
15、對于findstr命令,除非參數有 /C 前綴,請使用空格隔開(kāi)搜索字符串。例如: 'FINDSTR "hello there" x.y' 在文件 x.y 中尋找 "hello" 或"there" 。 'FINDSTR /C:"hello there" x.y' 文件 x.y 尋找"hello there"。
. 通配符:任何字符。
聯(lián)系客服