批處理(.bat文件)的使用


bat,即批處理(Batch),也稱為批處理腳本。顧名思義,批處理就是對某對象進行批量的處理,通常被認為是一種簡化的腳本語言,它應用於DOS和Windows系統中。

基本知識

  @echo off表示執行了這條命令后關閉所有命令(包括本身這條命令)的回顯。而echo off命令則表示關閉其他所有命令(不包括本身這條命令)的回顯,@的作用就是關閉緊跟其后的一條命令的回顯。

獲取當前目錄:

方法1:命令   %cd%  或者  !cd!  ,取得是運行的環境目錄
方法2:命令  %~dp0   ,取得了bat的文件所在目錄

@echo off
echo 當前盤符:%~d0
echo 當前盤符和路徑:%~dp0
echo 當前盤符和路徑的短文件名格式:%~sdp0
echo 當前批處理全路徑:%~f0
echo 當前CMD默認目錄:%cd%
pause

copy命令

將一份或多份文件復制到另一個位置。

COPY [/D] [/V] [/N] [/Y | /-Y] [/Z] [/L] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ …]] [destination [/A | /B]]

變量 說明
source 指定要復制的文件。
/A 表示一個 ASCII 文本文件。
/B 表示一個二進位文件。
/D 允許解密要創建的目標文件
destination 為新文件指定目錄和/或文件名。
/V 驗證新文件寫入是否正確。
/N 復制帶有非 8dot3 名稱的文件時,盡可能使用短文件名。
/Y 不使用確認是否要覆蓋現有目標文件的提示。
/-Y 使用確認是否要覆蓋現有目標文件的提示。
/Z 用可重新啟動模式復制已聯網的文件。
/L 如果源是符號鏈接,請將鏈接復制到目標而不是源鏈接指向的實際文件。

例如:

@echo off
REM 使用copy命令,寫路徑時,不要使用/

REM 拷貝一個文件到指定的目錄(/y :有重名文件不提示直接覆蓋 /-y :提示是否覆蓋  默認是/y)
REM copy /-y d:\mylog.log e:\ 

REM 拷貝一個文件到指定的目錄並重新命名
REM copy d:\mylog.log d:\mylog2.log

REM 拷貝許多文件到指定的目錄(指定的目錄必須存在)
REM copy d:\*.sql e:\123\

REM 拷貝源目錄下的所有文件到另一個目錄
REM copy e:\123\ e:\1234\

REM 合並多個文件
REM copy /b e:\123\1.txt + e:\123\2.txt  e:\123\3.txt

 

xcopy (外部命令)文件拷貝

復制文件和目錄樹。

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z] [/B] [/J]
[/EXCLUDE:file1[+file2][+file3]…]

變量 說明
source 指定要復制的文件
destination 指定新文件的位置和/或名稱。
/A 僅復制有存檔屬性集的文件,但不更改屬性。
/M 僅復制有存檔屬性集的文件,並關閉存檔屬性。
/D:m-d-y 復制在指定日期或指定日期以后更改的文件。如果沒有提供日期,只復制那些源時間比目標時間新的文件。
/EXCLUDE:file1[+file2][+file3]… 指定含有字符串的文件列表。每個字符串在文件中應位於單獨的一行。如果任何字符串與復制文件的絕對路徑的任何部分相符,則排除復制該文件。例如,指定如 \obj\ 或 .obj 的字符串會分別 排除目錄 obj 下面的所有文件或帶有.obj 擴展名的所有文件。
/P 創建每個目標文件之前提示你。
/S 復制目錄和子目錄,不包括空目錄。
/E 復制目錄和子目錄,包括空目錄
/V 驗證每個新文件的大小。
/W 提示你在復制前按鍵。
/C 即使有錯誤,也繼續復制。
/I 如果目標不存在,且要復制多個文件,則假定目標必須是目錄。
/Q 復制時不顯示文件名。
/F 復制時顯示完整的源文件名和目標文件名。
/L 顯示要復制的文件。
/G 允許將加密文件復制到 不支持加密的目標。
/H 也復制隱藏文件和系統文件。
/R 覆蓋只讀文件。
/T 創建目錄結構,但不復制文件。不包括空目錄或子目錄。/T /E 包括空目錄和子目錄。
/U 只復制已經存在於目標中的文件。
/K 復制屬性。一般的 Xcopy 會重置只讀屬性。
/N 用生成的短名稱復制。
/O 復制文件所有權和 ACL 信息。
/X 復制文件審核設置(隱含 /O)。
/Y 取消提示以確認要覆蓋現有目標文件。
/-Y 要提示以確認要覆蓋現有目標文件。
/Z 在可重新啟動模式下復制網絡文件。
/B 復制符號鏈接本身與鏈接目標。
/J 復制時不使用緩沖的 I/O。推薦復制大文件時使用。

開關 /Y 可以預先在 COPYCMD 環境變量中設置。

例如:

REM 復制源目錄下的所有文件並子文件夾到指定目錄(若指定的目錄不存在則會新建)(注意:e:\123后不要加\)
xcopy e:\123 e:\1234\456\ /s /e /i /y

 

del命令

刪除一個或數個文件。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

標識 說明
name 指定一個或多個文件或者目錄列表。通配符可用來刪除多個文件。如果指定了一個目錄,該目錄中的所有文件都會被刪除。
- 表示“否”的前綴
/P 刪除每一個文件之前提示確認。
/F 強制刪除只讀文件。
/S 刪除所有子目錄中的指定的文件。
/Q 安靜模式。刪除全局通配符時,不要求確認
/A 根據屬性選擇要刪除的文件
屬性 R 只讀文件     S 系統文件
H 隱藏文件     A 存檔文件
I 無內容索引文件   L 重分析點
- 表示“否”的前綴

如果命令擴展被啟用,DEL 和 ERASE 更改如下:

/S 開關的顯示句法會顛倒,即只顯示已經刪除的文件,而不顯示找不到的文件。

rd/?

刪除一個目錄。

RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

開關 作用
/S 除目錄本身外,還將刪除指定目錄下的所有子目錄和文件。用於刪除目錄樹。
/Q 安靜模式,帶 /S 刪除目錄樹時不要求確認

例如:

REM 刪除指定目錄下的所有文件(不刪除子文件夾下的文件)
REM DEL /Q E:\1234\456\ 

REM 刪除指定目錄下的所有文件(會刪除子文件夾下的文件,但會保留子文件夾)
REM DEL /S /Q E:\1234\456\ 

REM 刪除指定目錄下的所有,並自身目錄
REM RD /S /Q E:\1234\456\ 

 

 

 

 

常用例子

以“管理員權限”打開

@echo off
mode con lines=30 cols=60
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
rem 下面可以寫你的bat代碼了

@echo off
:: BatchGotAdmin
:-------------------------------------
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
View Code

 

切換cmd的字符集

//設置cmd的字符集為 UTF-8  (將下面兩行寫到一個 .bat文件中,雙擊即可)
chcp 65001
cmd

//設置cmd的字符集為 GBK  (將下面兩行寫到一個 .bat文件中,雙擊即可)
chcp 936
cmd

 

判斷32位還是64位系統

@echo off 
setlocal EnableDelayedExpansion

if "%PROCESSOR_ARCHITECTURE%" == "X86" (
 echo 32位系統
)^
else if "%PROCESSOR_ARCHITECTURE%" == "AMD64" (
 echo 64位系統
)^
else (
 echo 其他系統
)
pause

 

 

 

 

 

***************


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM