日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

教你編寫(xiě)bat腳本W(wǎng)indows批處理_DOS/BAT

作者:rainbow_lucky0106 ? 更新時(shí)間: 2022-06-23 編程語(yǔ)言

批處理腳本文件具有特殊的擴(kuò)展名BAT或CMD,這種類(lèi)型的文件通過(guò)稱為**命令解釋器(cmd.exe)**的系統(tǒng)文件提供的接口(shell)來(lái)識(shí)別和執(zhí)行。

常見(jiàn)用途

  • 為不同的目的設(shè)置服務(wù)器
  • 自動(dòng)管理活動(dòng)和日志,如刪除不需要的文件或日志文件
  • 自動(dòng)將應(yīng)用程序從一個(gè)環(huán)境部署到另一個(gè)環(huán)境。
  • 立即在各種機(jī)器上安裝程序。

bat命令速查

命令 備注
VER 顯示正在使用的MS-DOS的版本
ASSOC 這是將擴(kuò)展名與文件類(lèi)型(FTYPE)相關(guān)聯(lián)的批處理命令,顯示現(xiàn)有關(guān)聯(lián)或刪除關(guān)聯(lián)
cd 更改不同的目錄,或顯示當(dāng)前目錄
CLS 清屏
COPY 文件復(fù)制
DEL 刪除文件
DIR 列出目錄內(nèi)容
DATE 系統(tǒng)日期
ECHO 顯示消息,或打開(kāi)、關(guān)閉命令回顯
EXIT 退出DOS控制臺(tái)
MD 創(chuàng)建目錄
MOVE 移動(dòng)文件或目錄
PATH 顯示或設(shè)置路徑變量
PAUSE 等待輸入
PROMPT 用于更改或重置cmd.exe提示符
RD 刪除目錄(需為空)
REN 重命名文件和目錄
REM 注釋
START 在新窗口中啟動(dòng)程序,或打開(kāi)文檔
TIME 設(shè)置或顯示時(shí)間
TYPE 將文件或文件的內(nèi)容打印到輸出中
VOL 顯示卷標(biāo)
ATTRIB 顯示或設(shè)置當(dāng)前目錄中的文件的屬性
CHKDSK 檢查磁盤(pán)是否有問(wèn)題
CHOICE 為用戶提供了一個(gè)選項(xiàng)列表
CMD 調(diào)用另一個(gè)命令提示符實(shí)例
COMP 根據(jù)文件大小比較2個(gè)文件
CONVERT 將卷從FAT16或FAT32文件系統(tǒng)轉(zhuǎn)換為NTFS文件系統(tǒng)
DRIVERQUERY 顯示所有已安裝的設(shè)備驅(qū)動(dòng)程序及其屬性
EXPAND 從壓縮的.cab壓縮文件中提取文件
FIND 在文件或輸入中搜索字符串,輸出匹配的行
FORMAT 將磁盤(pán)格式化為使用Windows支持的文件系統(tǒng)(如FAT,F(xiàn)AT32或NTFS),從而覆蓋磁盤(pán)的先前內(nèi)容
HELP 顯示W(wǎng)indows提供的命令的列表
IPCONFIG 顯示W(wǎng)indows IP配置。顯示連接的配置和連接的名稱
LABEL 添加,設(shè)置或刪除磁盤(pán)標(biāo)簽
MORE 一次顯示一個(gè)或多個(gè)文件的內(nèi)容
NET 根據(jù)使用的命令提供各種網(wǎng)絡(luò)服務(wù)
PING 通過(guò)網(wǎng)絡(luò)將ICMP/IP “回顯”發(fā)送到指定的地址的包
SHUTDOWN 關(guān)閉計(jì)算機(jī),或者注銷(xiāo)當(dāng)前用戶
SORT 從源文件獲取輸入,并按字母順序排序其內(nèi)容,從A到Z或從Z到A。它將在控制臺(tái)上打印輸出
SUBST 將驅(qū)動(dòng)器號(hào)分配給本地文件夾,顯示當(dāng)前分配或刪除分配
SYSTEMINFO 該批處理命令顯示計(jì)算機(jī)及其操作系統(tǒng)的配置
TASKKILL 該批處理命令結(jié)束一個(gè)或多個(gè)任務(wù)
TASKLIST 列出任務(wù),包括任務(wù)名稱和進(jìn)程標(biāo)識(shí)(PID)
XCOPY 以更高級(jí)的方式復(fù)制文件和目錄
TREE 將當(dāng)前目錄的所有子目錄的樹(shù)顯示為遞歸或深度的任何級(jí)別
FC 列出兩個(gè)文件之間的實(shí)際差異
DISKPART 顯示和配置磁盤(pán)分區(qū)的屬性
TITLE 該批處理命令設(shè)置控制臺(tái)窗口中顯示的標(biāo)題
SET 顯示當(dāng)前系統(tǒng)上的環(huán)境變量列表

常用參數(shù)

/L: for循環(huán)移動(dòng)范圍的/L參數(shù)用于迭代數(shù)組
/A:數(shù)值

echo

@echo off
  • “echo off” :關(guān)閉腳本的顯示(不顯示命令)。
  • “@” :使命令也適用于自己。

注釋

Rem

Rem Remarks

程序執(zhí)行時(shí)忽略Rem關(guān)鍵字之后的任何內(nèi)容。

使用::聲明

:: Remarks

dir :獲取目錄內(nèi)容

> :將輸出重定向到文件

@echo off 
Rem This is for listing down all the files in the directory Program files 
dir "C:\Program Files" > C:\lists.txt 
echo "The program has completed"

變量

命令行參數(shù)

rem Test.bat
@echo off 
echo %1 
echo %2 
echo %3

運(yùn)行方式

Test.bat 1 2 3

set命令

set /A variable-name=value

  • variable-name: 變量的名稱
  • value:變量值。
  • /A:如果該值本質(zhì)上是數(shù)值,則使用此開(kāi)關(guān)。

字符串

@echo off 
set message=Hello World 
echo %message%
rem 變量需要包含在%符號(hào)中顯示

數(shù)值

@echo off 
SET /A a=5 
SET /A b=10 
SET /A c=%a% + %b% 
echo %c%

局部變量 vs 全局變量

  • 默認(rèn)情況下為全局變量。
  • 調(diào)用SETLOCAL命令,使變量局部在腳本的范圍內(nèi)。
  • 在調(diào)用SETLOCAL之后,任何變量賦值在調(diào)用ENDLOCAL,調(diào)用EXIT,或者當(dāng)執(zhí)行到達(dá)腳本中的文件結(jié)尾(EOF)時(shí)都會(huì)返回。
@echo off 
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL

環(huán)境變量輸出

@echo off 
echo %JAVA_HOME%

字符串

創(chuàng)建

set message=Hello World

空字符串

SET a= 
if [%a%]==[] echo "String A is empty" 

要檢查是否存在空字符串,需要在方括號(hào)中包含變量名,并將其與方括號(hào)中的值進(jìn)行比較。

字符串拼接

@echo off 
SET a=Hello 
SET b=World 
SET /A d=50 
SET c=%a% and %b% %d%
echo %c%
:: Hello and World 50

字符串長(zhǎng)度

@echo off
set str=Hello World
call :strLen str strlen
echo String is %strlen% characters long
exit /b
:strLen
setlocal enabledelayedexpansion
:strLen_Loop
   if not "!%1:~%len%!"=="" set /A len+=1 & goto :strLen_Loop
(endlocal & set %2=%len%)
goto :eof

轉(zhuǎn)int

使用set變量設(shè)置為字符串的變量后,可以使用set變量的**/A開(kāi)關(guān)轉(zhuǎn)換為整數(shù)**。

@echo off
set var=13145
set /A var=%var% + 5
echo %var%

截取

%variable:~num_chars_to_skip% 
%variable:~num_chars_to_skip,num_chars_to_keep%

輸出:

Helloworld?
Hello

~0,5用于指定需要顯示的字符

右對(duì)齊

@echo off 
set x=1000 
set y=1 
set y=%y% 
echo %x% 

set y=%y:~-4% 
echo %y%

輸出

1000
1

使用~-4選項(xiàng)來(lái)表示只想顯示字符串y的最后4個(gè)字符

刪除字符串

@echo off 
set str=Batch scripts is easy. It is really easy. 
echo %str% 
:: 刪除is
set str=%str:is=% 
echo %str%
:: Batch scripts easy. It really easy.

刪除兩端(保留中間)

@echo off 
set str=Batch scripts is easy. It is really easy 
echo %str% 

set str=%str:~1,-1% 
echo %str%
:: atch scripts is easy. It is really eas

刪除空格:=

@echo off 
set str=This string    has    a  lot  of spaces 
echo %str% 

set str=%str:=% 
echo %str%
:: Thisstringhasalotofspaces

替換

@echo off 
set str=This message needs changed. 
echo %str% 

set str=%str:needs=has% 
echo %str%
:: This message has changed.

數(shù)組

創(chuàng)建

  • 方法一:set
set a[0]=1
  • 方法二:值列表遍歷
@echo off 
set list=1 2 3 4 
(for %%a in (%list%) do ( 
   echo %%a 
))

訪問(wèn)

echo %a[0]%

修改

Set a[3]=4 

迭代

@echo off 
setlocal enabledelayedexpansion 
set topic[0]=comments 
set topic[1]=variables 
set topic[2]=Arrays 
set topic[3]=Decision making 
set topic[4]=Time and date 
set topic[5]=Operators 

for /l %%n in (0,1,5) do ( 
   echo !topic[%%n]! 
)

for循環(huán)移動(dòng)范圍的/L參數(shù)用于迭代數(shù)組

數(shù)組長(zhǎng)度

@echo off 
set Arr[0]=1 
set Arr[1]=2 
set Arr[2]=3 
set Arr[3]=4 
set "x=0" 
:SymLoop 

if defined Arr[%x%] ( 
   call echo %%Arr[%x%]%% 
   set /a "x+=1"
   GOTO :SymLoop 
)
echo "The length of the array is" %x%

結(jié)構(gòu)體

@echo off 
set len=3 
set obj[0].Name=Joe 
set obj[0].ID=1 
set obj[1].Name=Mark 
set obj[1].ID=2 
set obj[2].Name=Mohan 
set obj[2].ID=3 
set i=0 
:loop 
if %i% equ %len% goto :eof 
set cur.Name= 
set cur.ID=
for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do ( 
   set cur.%%k=%%l 
) 
echo Name=%cur.Name% 
echo Value=%cur.ID% 
set /a i=%i%+1 
goto loop

if語(yǔ)句

if %c%==15 (echo "The value of variable c is 15") else (echo "Unknown value") 

if defined :變量是否存在

if defined str1 echo "Variable str1 is defined"

if exists:文件是否存在

if exist C:\set3.txt (echo "File exists") else (echo "File does not exist")

if errorlevel:測(cè)試運(yùn)行的最后一個(gè)命令的退出代碼

if errorlevel n somecommand

各種命令發(fā)出整數(shù)退出代碼來(lái)表示命令的狀態(tài)。 通常,如果命令成功完成,則命令通過(guò)傳遞0;如果命令失敗,命令通過(guò)傳遞1。

for語(yǔ)句

  • %variable 指定一個(gè)單一字母可替換的參數(shù)。注意:批處理腳本中使用%%variable
  • (set) 指定一個(gè)或一組文件。可以使用通配符。
  • command 指定對(duì)每個(gè)文件執(zhí)行的命令。
  • command-parameters 為特定命令指定參數(shù)或命令行開(kāi)關(guān)。

/d

/r

/l

/f

goto語(yǔ)句

@echo off 
SET /A a=5 

if %a%==5 goto :labela 
if %a%==10 goto :labelb
:labela 
echo "The value of a is 5" 
exit /b 0
:labelb 
echo "The value of a is 10"

運(yùn)算符

關(guān)系運(yùn)算符

運(yùn)算符 備注
EQU 相等
NEQ 不等
LSS 左小于右
LEQ 小于等于
GTR 大于
GEQ 大于等于

系統(tǒng)日期

echo %DATE%

日期格式化

@echo off 
echo/Today is: %year%-%month%-%day% 
goto :EOF 
setlocal ENABLEEXTENSIONS 
set t=2&if "%date%z" LSS "A" set t=1 

for /f "skip=1 tokens=2-4 delims=(-)" %%a in ('echo/^|date') do ( 
   for /f "tokens=%t%-4 delims=.-/ " %%d in ('date/t') do ( 
      set %%a=%%d&set %%b=%%e&set %%c=%%f)) 
endlocal&set %1=%yy%&set %2=%mm%&set %3=%dd%&goto :EOF

系統(tǒng)時(shí)間

echo %TIME%

輸入輸出

  • 0:stdin 標(biāo)準(zhǔn)輸入
  • 1:stdout 標(biāo)準(zhǔn)輸出
  • 2:stderr 錯(cuò)誤消息

重定向

DIR C:\ > lists.txt 2> &1
  • 使用文件編號(hào)和"&"前綴來(lái)組合stdout和stderr流

函數(shù)

:function_name 
Do_something 
EXIT /B 0
  • function_name是賦予函數(shù)的名字,它應(yīng)該與函數(shù)的實(shí)際功能相匹配。
  • EXIT語(yǔ)句用于確保函數(shù)正常退出.
:Display 
SET /A index=2 
echo The value of index is %index% 
EXIT /B 0

調(diào)用 call :function_name

@echo off
Rem main
SETLOCAL
CALL :Display 5 , 10
EXIT /B %ERRORLEVEL%
Rem function
:Display
echo The value of parameter 1 is %~1
echo The value of parameter 2 is %~2
EXIT /B 0
  • 確保在主程序中放入EXIT / B%ERRORLEVEL%語(yǔ)句,以便將主程序的代碼與函數(shù)分開(kāi)。
  • 使用~1來(lái)訪問(wèn)發(fā)送給函數(shù)的第一個(gè)參數(shù),同樣使用~2來(lái)訪問(wèn)第二個(gè)參數(shù)。

進(jìn)程

查看進(jìn)程列表TASKLIST

:: 獲取內(nèi)存大于40MB的進(jìn)程
tasklist /fi "memusage gt 40000"
? ?
/S system 指定要連接的遠(yuǎn)程系統(tǒng)
/U [domain]user 指定命令應(yīng)在其下執(zhí)行的用戶上下文
/P [password] 指定給定用戶上下文的密碼。 提示輸入,如果省略。
/M [module] 列出當(dāng)前使用給定的exe / dll名稱的所有任務(wù)。 如果未指定模塊名稱,則顯示所有已加載的模塊。
/SVC 顯示每個(gè)進(jìn)程中托管的服務(wù)。
/V 顯示詳細(xì)的任務(wù)信息。
/FI filter 顯示一組符合過(guò)濾器指定條件的任務(wù)。
/FO format 指定輸出格式。 有效值:TABLE,LIST,CSV。
/NH 指定“列標(biāo)題”不應(yīng)顯示在輸出中。 僅適用于TABLE和CSV格式。
:: 獲取內(nèi)存大于40MB的進(jìn)程
tasklist /fi "memusage gt 40000"

終止進(jìn)程

START "title" [/D path] [options] "command" [parameters]
? ?
/S system 指定要連接的遠(yuǎn)程系統(tǒng)
/U [domain]user 指定命令應(yīng)在其下執(zhí)行的用戶上下文。
/P [password] 指定給定用戶上下文的密碼。 提示輸入,如果省略。
/FI FilterName 應(yīng)用過(guò)濾器來(lái)選擇一組任務(wù),允許使用*通配符。
/PID processID 指定要終止的進(jìn)程的PID。使用TaskList來(lái)獲取PID。
/IM ImageName 指定要終止的進(jìn)程的映像名稱。 通配符*可用于指定所有任務(wù)或圖像名稱。
/T 終止指定的進(jìn)程以及由其啟動(dòng)的任何子進(jìn)程。
/F 指定強(qiáng)制終止進(jìn)程。
:: 殺死(終止)打開(kāi)的記事本任務(wù)
taskkill /f /im notepad.exe
:: 殺死了一個(gè)ID為9901的進(jìn)程
taskill /pid 9901

啟動(dòng)進(jìn)程

START "title" [/D path] [options] "command" [parameters]
? ?
title CMD窗口標(biāo)題欄的文本(必需)
path 起始目錄。
command 命令,批處理文件或可執(zhí)行程序運(yùn)行。
parameters 傳遞給命令的參數(shù)

options:

? ?
/MIN 啟動(dòng)窗口最小化。
/MAX 啟動(dòng)窗口最大化。
/LOW 使用IDLE優(yōu)先級(jí)。
/NORMAL 使用NORMAL優(yōu)先級(jí)。
/ABOVENORMAL 使用ABOVENORMAL優(yōu)先級(jí)。
/BELOWNORMAL 使用BELOWNORMAL優(yōu)先級(jí)。
/HIGH 使用HIGH優(yōu)先級(jí)。
/REALTIME 使用REALTIME優(yōu)先級(jí)。
:: 在新窗口中運(yùn)行批處理腳本test.bat。 窗口將以最小化模式啟動(dòng),并且指定標(biāo)題為:“Test Batch Script”。
START "Test Batch Script" /Min test.bat
:: 在另一個(gè)進(jìn)程中運(yùn)行Microsoft Word,然后在MS Word中打開(kāi)文件TESTA.txt
START "" "C:\Program Files\Microsoft Office\Winword.exe" "D:\test\TESTA.txt"

別名

dw=dir /w

當(dāng)要執(zhí)行dir /w命令時(shí),可以簡(jiǎn)單地鍵入dw這個(gè)單詞。dw這個(gè)詞現(xiàn)在已經(jīng)成為命令dir /w的別名。

doskey 別名管理

DOSKEY [options] [macroname=[text]]

創(chuàng)建

@echo off
doskey cd=cd/test
doskey d=dir

刪除

@echo off
doskey cd=cd/test
doskey d=dir
d=

將d的值設(shè)置為NULL,所以宏d將被刪除。

管道(|)

管道運(yùn)算符(|)將一個(gè)命令的輸出(默認(rèn)為STDOUT)引導(dǎo)到另一個(gè)命令的輸入(默認(rèn)為STDIN)。

:: 兩個(gè)命令同時(shí)啟動(dòng),但是sort命令暫停,直到它接收到dir命令的輸出。 
:: sort命令使用dir命令的輸出作為輸入,然后將其輸出發(fā)送到句柄1(即STDOUT)。
dir C:\ | sort

原文鏈接:https://blog.csdn.net/qq_21980099/article/details/124141502

欄目分類(lèi)
最近更新