1. 顯示或更改文件屬性:attrib
ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename] [/S [/D]]
+ 設置屬性。- 清除屬性。
R 只讀文件屬性。
A 存檔文件屬性。
S 系統文件屬性。
H 隱藏文件屬性。
[drive:][path][filename] 指定要處理的文件屬性。/S 處理當前文件夾及其子文件夾中的匹配文件。/D 也處理文件夾。
1,查看文件的文件屬性
格式:ATTRIB [drive:][path][filename]
例1,attrib d:\ pagefile.sys查看d:\ pagefile.sys文件的屬性。
2,修改文件的屬性。格式:attrib ±屬性
例 :attrib –h d:\ pagefile.sys消除d:\ pagefile.sys的"隱藏"屬性。
例:attrib +s +h d:\ pagefile.sys給d:\ pagefile.sys設置"系統"和"隱藏"屬性。
3, 批量文件處理
例1,attrib +h d:\123\*.bat /s通過/s參數可批量將d:\123及其子目錄下的所有bat文件設置為"隱藏"屬性.
例2,attrib +h d:\123 /s /d將d:\123及其下所有同名為123的子目錄設置為"隱藏"屬性.參數/d必須在批量設置文件屬性的同時,對指定目錄及其下所有子目錄進行文件屬性操作。參數/d可以理解為"directory"(目錄),也就是說/d 必需和/s一起使用。
"attrib +h d:\123 /s /d"和"attrib +h d:\123\*.* /s /d"區別:前者只有d:\123以及它同名的子目錄設為了"隱藏",而其它文件及子目錄都沒有設置"隱藏"。后者則將d:\123下的所有文件及子目錄設置了"隱藏"屬性,但d:\123目錄沒有設置"隱藏"屬性。
2.啟動外部命令或打開程序文件:Call,Start,Rundll32
call用來調用執行另一個bat或者cmd文件(當然也可執行其它格式的可執行文件),
start是調用系統默認的打開方式執行一個文件,是在一個新的進程里面執行
rundll32 是給一個可獨立運行的dll創建一個進程空間從而使他可以運行,詳見《悟透Delphi》中進程的時空觀。
Call與start對比:
一是調用范圍不同:CALL主要用來進行批處理的內部調用如CALL:PEND和一些DOS命令的調用如CALL SET TEST=2,但也可以調用其他可執行文件,而START則不能進行內部調用,但其可以執行基本上所有的外部程序,還可以執行SHELL,如打開文件夾START "" "%WINDIR%",安裝網絡打印機START "" "\\IP\Printer",同時需要注意有無START調用外部程序的區別;
二是調用方式不同:CALL實際上調用,所以在CALL另一個批處理時是在同一窗體進程里執行,而START是執行,所以在執行另外一個批處理時是在不同的窗體進程里執行,也就是說在新的進程里執行,雖然START可以加入B參數,但其結果卻完全不同.如我們使用CALL SET TEST=2和START /B SET TEST=2看似執行的結果相同,但是我們發現后者有兩個進程,而且在窗體里要執行兩次EXIT才能退出,所以當我們使用START來執行一個批處理后最好在被調用的批處理中也加一個EXIT,否則無法退出被調用的批處理的DOS窗體,但是使用CALL調用時如果在被調用的批處理中存在EXIT則會直接結束原始和別調用的批處理程序,這是一個非常嚴重的問題,建議在被調用的程序中使用goto:eof來取代EXIT;.
三是調用結果不同:CALL調用不僅可以把參數或變量傳給被調用的批處理,而且被調用的批處理也可以設置參數或變量以便回傳,而START只能把參數或變量傳給被調用的批處理,卻不能回傳參數或變量,這一點實際上是第二點的延伸.至於此我們還必須注意使用CALL調用其他批處理中我們使用GOTO的時候建議使用不同的節來跳轉,否則可能跳轉到原批處理中而不能完整的執行被調用的批處理.
Call調用其它bat文件時,他們擁有同一個殼cmd.exe,在同一個進程當中,所以他們的變量是互通的;start調用其它批處理時,他們擁有兩個殼cmd.exe,但在不同的進程當中,而由於這時他們的殼都是cmd.exe,可以看成父子進程關系,子進程可以讀取父進程中的變量,但不能賦予父進程變量的值。而當用start打開其它程序時,它們之間有不同的殼,就不是父子進程關系。
call具有goto的功能,在程序中實現靈活跳轉,而start則不具有這種功能。
:begin
@echo off
set /a a=%random%%%10
echo %a%
pause>nul
if %a% geq 5 (call :run2) else call :run1
:run1
echo 111111111
call :ex
:run2
echo 222222222
:ex
call :begin
call和goto的區別在於call可以用goto :eof回來,而goto則一去不復返:call之后,就執行到指定標簽上並往后執行到未尾,然后再回到call句之后,是自然回來的,而非goto:eof回來的。goto:eof的:eof是默認的標簽,不用定義,此句是直到最后並結束批文件。
start . 在命令行啟動文件目錄
start , 新開啟cmd命令行
3. 目錄切換:cd
1,同一個分區的切換目錄切換格式:格式:CD [盤符][路徑]
如果當前目錄是C:\WINDOWS\system3,我們要返回到上一層目錄,即返回到C:\WINDOWS時,我們可以這樣:cd..
如果當前目錄是C:\WINDOWS\system3,我們要返回根目錄,即返回到C:\時,你可以試下這個:cd\ 或cd c:\
其實在DOS命令中.、..和\都是表示相對路徑的,.是當前目錄,..是上一層目錄,而\則表示根目錄。
2,不同分區的切換格式:格式:CD /d [盤符][路徑]
如果當前目錄是C:\WINDOWS\system3,我們要切換到D盤的根目錄,可以cd /d D:\ 或D:
3.CD 的另一個用途:顯示當前的完整路徑,一般用通過 %cd% 加以引用。
@echo off
echo 當前路徑是 %cd%
pause
4.復制或移動文件:Copy,Xcopy,Move
copy只能復制文件,不能復制文件夾。
1,單個文件的復制
格式:copy source[drive:][path][filename] [destination [drive:][path][filename]]
即copy 要復制的源文件(包括路徑和文件名) 文件復制的目標路徑[\文件名],當[destination [drive:][path][filename]]缺省時則為當前目錄。
例1, copy c:\123.txt d:\把123.txt復制到d:\目錄下。如果此操作成功,命令行窗口中會提示"已復制 1個文件"。
例2, copy c:\123.txt d:\abc.bat把123.txt復制到d:\目錄下,並把它修改為abc.bat,這里修改了文件名和它的格式。
例3, copy .\123把當前目錄下的123子目錄中的文件全部拷到當前目錄。
2,批量復制文件
例1,copy c:\123 d:\abc將c:\123 目錄中所有文件復制到d:\abc目錄中.
例2,copy c:\123\*.rm d:\abc /y將c:\123 目錄中所有rm格式的文件復制到d:\abc目錄中,當目標目錄中已經存在了和源目錄中即將復制的文件相同文件名的文件時,就會出現如"改寫x:\xx嗎?(Yes/No/All):"這樣的提示,讓你選擇是覆蓋、不覆蓋還是全部覆蓋時,通過參數/y(復制單個文件或批量復制時皆可使用),可以實現重名文件無須確認直接覆蓋。
3,合並文件:格式:copy /b 文件1+文件2+……文件N 合並后的文件名
例1, copy /b d:\1.mp3+d:\2.mp3 e:\3.mp3把1.mp3和2.mp3合並成3.mp3。
例2, copy /b d:\1.txt+d:\2.mp3把1.txt和2.mp3合並,這里沒有指定合成后的文件名哦,缺省情況下,合並后的文件名是命令中的第一個文件的名。在這里,即把2.mp3合並進了1.txt。
★在尾部隱藏了文本數據的圖片文件,在使用其他軟件進行編輯並保存后,隱藏的文本數據有可能會丟失。
★MP3文件在使用此方法連接后,能實現連續播放。
★合並圖片/歌曲這樣的二進制文件必須使用/b參數(b代表Binary,二進制),否則合並將會失敗;另一個合並參數是/a(a代表ASCII,文本文件),只能用於純文本的合並。兩參數不能同時使用,二進制方式可以合並文本和二進制文件,而文本方式則只能合並文本。
Xcopy可以復制文件和目錄樹。
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W] [/C] [/Q] [/F] [/L] [/G] [/H] [/R] [/T]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/EXCLUDE:file1[+file2][+file3]...]
Source:必需的。指定要復制的文件的位置和名稱。該參數必須包含驅動器或路徑。
Destination 可省略。指定要復制的文件的目標。該參數可以包含驅動器盤符和冒號、目錄名、文件名或者它們的組合。如果省略 Destination,xcopy 命令將文件復制到當前目錄。
xcopy可使用的參數太多了,這里只選幾個常用的來講一下。
/S 復制非空的目錄和子目錄。如果省略 /s,xcopy 將在一個目錄中工作。
例1,xcopy /s d:\123 e:\kkk\復制d:\123目錄下所有文件(夾)到e:\kkk,不包括空的子目錄。(默認情況下,xcopy 不復制隱藏或系統文件)
/E 復制所有子目錄,包括空目錄。同時使用 /e、/s 和 /t 命令行選項。
例2, xcopy /e d:\123 e:\kkk\復制d:\123目錄下所有文件(夾)到e:\kkk,包括空的子目錄。(默認情況下,xcopy 不復制隱藏或系統文件)
/H 復制具有隱藏和系統文件屬性的文件。默認情況下xcopy 不復制隱藏或系統文件。
例3, xcopy /e /h d:\123 e:\kkk\復制d:\123目錄下所有文件(夾)到e:\kkk,包括空的子目錄。加上了/h參數后,xcopy 復制隱藏或系統的文件
/T 只復制子目錄結構(即目錄樹),不復制文件。要復制空目錄,必須包含 /e 選項。
/Y 禁止提示您確認要覆蓋現存的目標文件。
當目標目錄中已經存在了和源目錄中即將復制的文件相同文件名的時候,就會出現"改寫 X:\XXX
(Yes/No/All)?"這樣的提示,讓你選擇是覆蓋、不覆蓋還是全部覆蓋時,通過參數/y,可以實現重名文件無須確認直接覆蓋。
★注意指定 Destination 是文件還是目錄。
如果 Destination 不包含現有目錄且不以反斜杠 (\) 結尾,系統將會詢問你目標 X:\XXX 是文件名還是目錄名(F = 文件,D = 目錄)?
如果要將一個或多個文件復制到一個文件,請按 F。如果要將一個或多個文件復制到一個目錄,請按 D。
思考:比較一下xcopy /e d:\123 e:\kkk\和 xcopy /e d:\123 e:\kkk 兩者之間有什么不同?
兩者都是復制d:\123目錄下所有文件(夾)到e:\kkk,包括空的子目錄,但前者不會詢問你目標e:\kkk是文件名還是目錄名(F = 文件,D = 目錄)?
Move移動文件並重命名文件和目錄。
要移動至少一個文件:MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination
要重命名一個目錄:MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2
[drive:][path]filename1 指定您想移動的文件位置和名稱。
destination 指定文件的新位置。目標可包含一個驅動器號和冒號、一個目錄名或組合。如果只移動一個文件並在移動時將其重命名,您還可以包括文件名。
[drive:][path]dirname1 指定要重命名的目錄。dirname2 指定目錄的新名稱。
/Y 取消確認改寫一個現有目標文件的提示。/-Y 對確認改寫一個現有目標文件發出提示。
1,移動文件(夾)
基本格式:MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination
[drive:][path]filename1[,...] 想要移動的文件(夾)可以使用相對路徑,也可以使用絕對路徑,缺省路徑情況下默認為當前目錄。
Destination 只能是目錄路徑, 可以使用相對路徑,也可以使用絕對路徑,缺省路徑情況下默認為當前目錄。
例1, move d:\abc d:\abcd如果把文件夾abc移到文件夾abcd內。
例2, move 123.txt abc把當前目錄下的123.txt移動到當前文件夾abc內。這里都使用了相對路徑,缺省路徑情況下默認為當前目錄。
例3, move 123.txt e:\abc把當前目錄下的123.txt移動到e:\abc目錄下。
2,重命名文件(夾)
例4, move d:\abc d:\abcd這里要注意一下,如果目標文件夾abcd不存在,則把abc移到d:\下,並把自身名稱更改為abcd。利用這一特性,move命令具備重命名功能。
例5, move d:\123.txt d:\abc\456.txt如果 456.txt存在,系統將會提示你:改寫 D:\456.txt 嗎? (Yes/No/All): 當你輸入Y后,則123.txt會覆蓋456.txt。如果456.txt不存在,則把123.txt移到d:\abc目錄下,並重命名為456.txt。
例6, move /y 123.txt 456.txt如果123.txt和456.txt都存在,通過/y參數后,系統不會提示你,而直接把123.txt覆蓋456.txt。
例7, move 123.txt e:\abc\456.txt對於跨區移動,如果456.txt存在會提示:文件存在。命令不會執行;如果456.txt不存在,則把123.txt移動到e:\abc 目錄下,並重命名為456.txt。
★MOVE命令可以跨分區移動文件,卻不可以跨分區移動文件夾。
★對於跨分區移動文件時,如果目標位置存在和將要移動的文件同名時,系統會提示:"文件存在。" 最后,命令將不會執行。
★對於隱藏或系統屬性的文件,只有把它們的屬性去除后,move命令才會執行。
總結move A B這樣的模式
1、如果A、B同為文件夾名,
①如果B存在,則把A移動到B目錄下。(如例1);
②如果B不存在,則把A移動到B所在的目錄下,同時重命名為B。(如例4)。
2、如果A為文件名,
① B為文件夾名的時候,將把A移動到B目錄下。(如例2,例3);
② B為文件名時,如果B存在,則系統會提示你是否將把A重命名為B;如果
B不存在就把A移動到B所在的目錄下的同時,重命名為B。(如例5);
③ B所在的位置為另一目錄,如果B存在,則命令不執行;如果B不存在,則把A移動到B所在的目錄下並重命名為B。(如例7)。