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

學無先后,達者為師

網站首頁 編程語言 正文

教你編寫bat腳本Windows批處理_DOS/BAT

作者:rainbow_lucky0106 ? 更新時間: 2022-06-23 編程語言

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

常見用途

  • 為不同的目的設置服務器
  • 自動管理活動和日志,如刪除不需要的文件或日志文件
  • 自動將應用程序從一個環境部署到另一個環境。
  • 立即在各種機器上安裝程序。

bat命令速查

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

常用參數

/L: for循環移動范圍的/L參數用于迭代數組
/A:數值

echo

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

注釋

Rem

Rem Remarks

程序執行時忽略Rem關鍵字之后的任何內容。

使用::聲明

:: Remarks

dir :獲取目錄內容

> :將輸出重定向到文件

@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"

變量

命令行參數

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

運行方式

Test.bat 1 2 3

set命令

set /A variable-name=value

  • variable-name: 變量的名稱
  • value:變量值。
  • /A:如果該值本質上是數值,則使用此開關。

字符串

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

數值

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

局部變量 vs 全局變量

  • 默認情況下為全局變量。
  • 調用SETLOCAL命令,使變量局部在腳本的范圍內。
  • 在調用SETLOCAL之后,任何變量賦值在調用ENDLOCAL,調用EXIT,或者當執行到達腳本中的文件結尾(EOF)時都會返回。
@echo off 
set globalvar=5
SETLOCAL
set var=13145
set /A var=%var% + 5
echo %var%
echo %globalvar%
ENDLOCAL

環境變量輸出

@echo off 
echo %JAVA_HOME%

字符串

創建

set message=Hello World

空字符串

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

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

字符串拼接

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

字符串長度

@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

轉int

使用set變量設置為字符串的變量后,可以使用set變量的**/A開關轉換為整數**。

@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用于指定需要顯示的字符

右對齊

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

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

輸出

1000
1

使用~-4選項來表示只想顯示字符串y的最后4個字符

刪除字符串

@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.

數組

創建

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

訪問

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循環移動范圍的/L參數用于迭代數組

數組長度

@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%

結構體

@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語句

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:測試運行的最后一個命令的退出代碼

if errorlevel n somecommand

各種命令發出整數退出代碼來表示命令的狀態。 通常,如果命令成功完成,則命令通過傳遞0;如果命令失敗,命令通過傳遞1。

for語句

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

/d

/r

/l

/f

goto語句

@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"

運算符

關系運算符

運算符 備注
EQU 相等
NEQ 不等
LSS 左小于右
LEQ 小于等于
GTR 大于
GEQ 大于等于

系統日期

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

系統時間

echo %TIME%

輸入輸出

  • 0:stdin 標準輸入
  • 1:stdout 標準輸出
  • 2:stderr 錯誤消息

重定向

DIR C:\ > lists.txt 2> &1
  • 使用文件編號和"&"前綴來組合stdout和stderr流

函數

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

調用 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%語句,以便將主程序的代碼與函數分開。
  • 使用~1來訪問發送給函數的第一個參數,同樣使用~2來訪問第二個參數。

進程

查看進程列表TASKLIST

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

終止進程

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

啟動進程

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

options:

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

別名

dw=dir /w

當要執行dir /w命令時,可以簡單地鍵入dw這個單詞。dw這個詞現在已經成為命令dir /w的別名。

doskey 別名管理

DOSKEY [options] [macroname=[text]]

創建

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

刪除

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

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

管道(|)

管道運算符(|)將一個命令的輸出(默認為STDOUT)引導到另一個命令的輸入(默認為STDIN)。

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

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

欄目分類
最近更新