午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

批處理腳本(bat腳本)用法總結(jié)

 東方司空 2024-02-25 發(fā)布于湖北

目錄

  • 批處理(Batch),也稱(chēng)為批處理腳本。顧名思義,批處理就是對(duì)某對(duì)象進(jìn)行批量的處理,通常被認(rèn)為是一種簡(jiǎn)化的腳本語(yǔ)言,它應(yīng)用于 DOS 和 Windows 系統(tǒng)中。批處理文件的擴(kuò)展名為 bat(或 cmd)。通常我們指定的批處理指 DOS批處理腳本。
  • DOS 批處理則是基于 DOS 命令的,用來(lái)自動(dòng)地批量地執(zhí)行 DOS 命令以實(shí)現(xiàn)特定操作的腳本。更復(fù)雜的情況,需要使用if、for、goto等命令控制程式的運(yùn)行過(guò)程,如同 C、Python 等高級(jí)語(yǔ)言一樣。如果需要實(shí)現(xiàn)更復(fù)雜的應(yīng)用,利用外部程式是必要的,這包括系統(tǒng)本身提供的外部命令和第三方提供的工具或者軟件。批處理程序雖然是在命令行環(huán)境中運(yùn)行,但不僅僅能使用命令行軟件,任何當(dāng)前系統(tǒng)下可運(yùn)行的程序都可以放在批處理文件中運(yùn)行。

一、常用命令

常用命令也可見(jiàn)文章:鏈接

  • 文件夾管理
    • cd 顯示當(dāng)前目錄名或改變當(dāng)前目錄。
    • md 創(chuàng)建目錄。
    • rd 刪除一個(gè)目錄。
    • dir 顯示目錄中的文件和子目錄列表。
    • tree 以圖形顯示驅(qū)動(dòng)器或路徑的文件夾結(jié)構(gòu)。
    • path 為可執(zhí)行文件顯示或設(shè)置一個(gè)搜索路徑。
    • xcopy 復(fù)制文件和目錄樹(shù)。
  • 文件管理
    • type 顯示文本文件的內(nèi)容。
    • copy 將一份或多份文件復(fù)制到另一個(gè)位置。
    • del 刪除一個(gè)或數(shù)個(gè)文件。
    • move 移動(dòng)文件并重命名文件和目錄。(Windows XP Home Edition中沒(méi)有)
    • ren 重命名文件。
    • replace 替換文件。
    • attrib 顯示或更改文件屬性。
    • find 搜索字符串。
    • fc 比較兩個(gè)文件或兩個(gè)文件集并顯示它們之間的不同
  • 網(wǎng)絡(luò)命令
    • ping 進(jìn)行網(wǎng)絡(luò)連接測(cè)試、名稱(chēng)解析
    • ftp 文件傳輸
    • net 網(wǎng)絡(luò)命令集及用戶管理
    • telnet 遠(yuǎn)程登陸
    • ipconfig顯示、修改TCP/IP設(shè)置
    • msg 給用戶發(fā)送消息
    • arp 顯示、修改局域網(wǎng)的IP地址-物理地址映射列表
  • 系統(tǒng)管理
    • at 安排在特定日期和時(shí)間運(yùn)行命令和程序
    • shutdown立即或定時(shí)關(guān)機(jī)或重啟
    • tskill 結(jié)束進(jìn)程
    • taskkill結(jié)束進(jìn)程(比tskill高級(jí),但WinXPHome版中無(wú)該命令)
    • tasklist顯示進(jìn)程列表(Windows XP Home Edition中沒(méi)有)
    • sc 系統(tǒng)服務(wù)設(shè)置與控制
    • reg 注冊(cè)表控制臺(tái)工具
    • powercfg控制系統(tǒng)上的電源設(shè)置

二、基本語(yǔ)法

1. 注釋

bat腳本中,我們使用 ::REM 添加注釋?zhuān)梅ㄈ缦拢?/p>

:: 打印“你好,世界!”
echo 你好,世界!

注意

  • :: 只能出現(xiàn)在每一行的開(kāi)頭,其后的內(nèi)容被當(dāng)作注釋
  • REM 可用于任何位置,其后的內(nèi)容被當(dāng)作是注釋

2. 變量

變量類(lèi)型包括:數(shù)字、字符串及數(shù)組。

:: 定義數(shù)字變量
set /a n=0
:: 定義字符串變量
set s1=hellworld
set s2="Hello World"
set "s3=Hello, World!"
:: 定義數(shù)組變量
set arr = 1 2 3 4 5 6
@echo off 
set list=1 2 3 4 
(for %%a in (%arr%) do ( 
   echo %%a 
))

注意:

  • 變量名與內(nèi)容之間通過(guò)=連接且沒(méi)有空格

3. 判斷

在bat腳本中,if條件判斷語(yǔ)句共有6種比較操作符,分別為

操作符描述全稱(chēng)
equ等于equal
neq不等于no equal
lss小于less than
leq小于等于leq less than or equal
gtr大于greater than
geq大于等于geq greater than or equal

注意:

  • 只有等于操作符可以使用符號(hào) == 表示
if 條件 (
    執(zhí)行命令
) else (
    執(zhí)行命令
)

4. 循環(huán)

for /l %%x in (1,1,10) do (
    echo 變量 x 的值是 %%x
)

5. 函數(shù)

@echo off

rem 定義函數(shù)
:myFunction
echo 這是我的函數(shù)
exit /b

rem 調(diào)用函數(shù)
call :myFunction

6. 文件操作

:: 創(chuàng)建文件
echo Hello > myfile.txt
:: 復(fù)制文件
copy source.txt destination.txt
:: 移動(dòng)文件
move source.txt destination_folder:: 重命名文件
ren oldname.txt newname.txt
:: 刪除文件
del myfile.txt

7. 字符串操作

7.1 字符串連接

set str1=Hello
set str2=World
set result=%str1% %str2%
echo %result%

這將輸出 Hello World。在批處理中,可以使用 % 符號(hào)來(lái)引用變量,并使用空格將字符串連接起來(lái)。

7.2 字符串截取

set myvar=abcdef
set substring=%myvar:~0,3%
echo %substring%

這將輸出 abc。:~ 后跟的是截取的起始索引和長(zhǎng)度。在這個(gè)例子中,0,3 表示從索引 0 開(kāi)始截取,長(zhǎng)度為 3。

7.3 字符串查找:

set myvar=abcdef
echo %myvar:~2%

這將輸出 cdef。如果省略長(zhǎng)度,則從指定的索引開(kāi)始一直截取到字符串末尾。

7.4 字符串替換:

set myvar=abc123abc
set newvar=%myvar:abc=xyz%
echo %newvar%

三、基本指令

注意,bat 腳本不區(qū)分大小寫(xiě)。

1. rem 和 ::

:: 用于進(jìn)行文本的注釋?zhuān)瑘?zhí)行后不會(huì)回顯內(nèi)容。
rem 用于文本注釋?zhuān)瑘?zhí)行后會(huì)回顯內(nèi)容。

2. echo 和 @

@字符放在命令前將關(guān)閉該命令回顯,?論此時(shí)echo是否為打開(kāi)狀態(tài)。

  • 打開(kāi)回顯功能:echo on
  • 關(guān)閉回顯功能:echo off
  • 輸出空行:echo.echo,echo:echo/
  • 顯示當(dāng)前echo狀態(tài):echo
  • 輸出提示信息:echo 信息內(nèi)容
  • 答復(fù)提問(wèn):echo 答復(fù)語(yǔ)|執(zhí)行的操作
  • 新建文件:echo 文件內(nèi)容>文件名
  • 新增內(nèi)容:echo 文件內(nèi)容>>文件名
  • 喇叭鳴響:echo ^g

3. pause

使當(dāng)前程序暫停,并輸出以下內(nèi)容,作用是為了讓我們知道程序運(yùn)行到哪步了。
顯示其他提示語(yǔ):echo 其他提示語(yǔ) & pause > nul

在這里插入圖片描述

4. errorlevel

獲取程序返回碼:echo %errorlevel%
每個(gè)命令運(yùn)?結(jié)束,可以?這個(gè)命令?格式查看返回碼。?于判斷剛才的命令是否執(zhí)?成功,默認(rèn)值為0,?般命令執(zhí)?出錯(cuò)會(huì)設(shè) errorlevel 為1。

5. title

設(shè)置cmd窗口的標(biāo)題,語(yǔ)法如下:

title 我的窗口

在這里插入圖片描述

6. color

設(shè)置默認(rèn)控制臺(tái)的前景色和背景色,語(yǔ)法如下:

color [前景色][背景色]

顏?屬性由兩個(gè)?六進(jìn)制數(shù)字指定 – 第?個(gè)為背景色,第?個(gè)則為前景色。每個(gè)數(shù)字可以為以下任何值之?。

數(shù)值顏色數(shù)值顏色
0??8灰?
1藍(lán)?9淡藍(lán)?
2綠?A淡綠?
3湖藍(lán)?B淺綠?
4紅?C淡紅?
5紫?D淡紫?
6黃?E淡黃?
7??F亮??

示例如下:
在這里插入圖片描述

7. goto 和 :

通過(guò)goto:標(biāo)號(hào)可以實(shí)現(xiàn)跳轉(zhuǎn)執(zhí)行命令。

@echo off
:start
set /a var+=1
echo %var%
if %var% leq 3 GOTO start
pause

8. find

在文件中搜索字符串,語(yǔ)法如下:

find [/v][/c][/n][/i][/off[line]] "字符串" [[drive:][path]filename[...]]
  • /v 顯示所有未包含指定字符串的行
  • /c 僅顯示包含字符串的行數(shù)
  • /n 顯示行號(hào)
  • /i 搜索字符串時(shí)忽略大小寫(xiě)
  • /off[line] 不要跳過(guò)具有脫機(jī)屬性集的文件
  • "字符串" 指定要搜索的字符串
  • [drive:][path]filename 指定要搜索的文件

9. start

批處理中用來(lái)調(diào)用外部程序的命令,語(yǔ)法如下:

start 外部程序 [參數(shù)]

參數(shù):

  • /D path 指定程序的起始目錄
  • /MIN 最小化啟動(dòng)窗口
  • /MAX 最大化啟動(dòng)窗口
  • /WAIT 等待啟動(dòng)的程序結(jié)束后才繼續(xù)腳本
  • /B 在同一窗口中啟動(dòng)程序
  • /b 隱藏控制臺(tái)執(zhí)行程序
    說(shuō)明:
  • 該命令將在新進(jìn)程中運(yùn)行外部程序,原批處理程序?qū)⒗^續(xù)執(zhí)行
  • 執(zhí)行運(yùn)行外部程序則會(huì)等待外部程序完成后再繼續(xù)執(zhí)行后續(xù)指令

示例:start explorer d:\ 將會(huì)使用圖形界面打開(kāi)D盤(pán)。

10. call

CALL命令可以在批處理執(zhí)?過(guò)程中調(diào)?另?個(gè)批處理,只有當(dāng)被調(diào)用的批處理執(zhí)?完后,才能繼續(xù)執(zhí)?原來(lái)的批處理,語(yǔ)法如下:

call 指定批處理文件

11. assoc 和 ftype

assoc 和 ftype 可實(shí)現(xiàn)文件關(guān)聯(lián),語(yǔ)法如下:

assoc .txt	::顯示.txt代表的“文件類(lèi)型”,結(jié)果顯?.txt=txtfile
ftype		::顯示所有的文件類(lèi)型關(guān)聯(lián)

assoc .txt=Word.Document.8  ::設(shè)置.txt文件未word類(lèi)型的文檔,可看到.txt文件圖標(biāo)已改變

12. pushd 和 popd

主要用于保存并返回初始目錄,示例如下:

cd /d d:\mp4 	::更改當(dāng)前?錄為 d:\mp4
pushd c:\mp3 	::保存當(dāng)前?錄,并切換當(dāng)前?錄為 c:\mp3
popd 			::恢復(fù)當(dāng)前?錄為剛才保存的 d:\mp4

13. if

條件判斷語(yǔ)句,語(yǔ)法如下:

if [not] errorlevel number command
if [not] str1==str2 command
if [not] exist filename command

14. mode

@echo off
mode con: cols=80 lines=30

echo This is a sample batch script.
echo It sets the console window size to 80 columns by 30 lines.
pause

在這個(gè)例子中,mode con: cols=80 lines=30 設(shè)置控制臺(tái)窗口的列數(shù)為80,行數(shù)為30。

四、常用特殊符號(hào)

1. @

用在任何命令前面,實(shí)現(xiàn)關(guān)閉當(dāng)前行的回顯.

2. %

%0 %1 %2 %3 %4 %5 %6 %7 %8 %9 %*為命令?傳遞給批處理的參數(shù)
%0 批處理?件本?,包括完整的路徑和擴(kuò)展名
%1 第?個(gè)參數(shù)
%9 第九個(gè)參數(shù)
%* 從第?個(gè)參數(shù)開(kāi)始的所有參數(shù)

3. >

DOS的標(biāo)準(zhǔn)輸?輸出通常是在標(biāo)準(zhǔn)設(shè)備鍵盤(pán)和顯?器上進(jìn)?的,利?重定向,可以?便地將輸?輸出改向磁盤(pán)?件或其它設(shè)備。其中:

  • ?于號(hào) > 將命令發(fā)送到?件或設(shè)備,例如打印機(jī)>prn
  • 雙?于號(hào) >> 將命令輸出添加到?件結(jié)尾?不刪除?件中已有的信息
  • ?于號(hào) < 從?件?不是鍵盤(pán)上獲取命令所需的輸?
  • >& 符號(hào)將輸出從?個(gè)默認(rèn)I/O流(stdout,stdin,stderr)重新定向到另?個(gè)默認(rèn)I/O流

4. >>

>>> 有點(diǎn)類(lèi)似,但他們的區(qū)別是 >> 是傳遞并在?件的末尾追加,? > 是覆蓋。

五、實(shí)際案例

1. 設(shè)置臨時(shí)環(huán)境變量

在命令行模式下設(shè)置的環(huán)境變量,屬于臨時(shí)環(huán)境變量,只針對(duì)當(dāng)前的CMD命令窗口有效,并不影響其他窗口中的環(huán)境變量,更不會(huì)影響到永久性的環(huán)境變量,要設(shè)置永久的環(huán)境變量,需要通過(guò)圖形操作修改。

CMD

set path=%path%;C:\test  ::在原有環(huán)境變量的基礎(chǔ)上追加環(huán)境變量

PowerShell

$env:path+="C:\test"

2. 啟動(dòng)CMD執(zhí)行命令

start cmd /k    ::啟動(dòng)一個(gè)CMD且不關(guān)閉CMD
start cmd /c    ::啟動(dòng)一個(gè)CMD且關(guān)閉CMD
start cmd /k  "命令1 & 命令2 & 命令3"     ::無(wú)論前面命令是否成功, 后面都會(huì)執(zhí)行
start cmd /k "命令1 && 命令2 && 命令3 "   ::僅當(dāng)前面命令成功時(shí), 才執(zhí)行后面,一般用這個(gè)
start cmd /k "命令1 || 命令2 || 命令3"    ::僅當(dāng)前面命令失敗時(shí). 才執(zhí)行后面

如果需要執(zhí)行指定的腳本文件,請(qǐng)使用 call 命令,示例如下:

call test.bat

3. 打開(kāi)環(huán)境變量窗口

rundll32 sysdm.cpl,EditEnvironmentVariables

4. 獲取用戶輸入并顯示

@echo off

set /p user_input=請(qǐng)輸入內(nèi)容:
echo 你輸入的內(nèi)容是:%user_input%

5. 執(zhí)行外部程序后再執(zhí)行腳本

@echo off

:: 打開(kāi)指定軟件
start notepad.exe

:: 延時(shí)5秒	
echo Waiting for 5 seconds...
timeout /t 5 /nobreak >nul		

:: 激活虛擬環(huán)境
echo Activating virtual environment...	
call .\venv\Scripts\activate		

:: 執(zhí)行python腳本
python test.py

echo sucess!
echo Windows will close in 5 seconds...
timeout /t 5 /nobreak >nul

6. 執(zhí)行命令并隱藏窗口

@echo off
start /b notepad	::打開(kāi)記事本

7. 執(zhí)行命令并最小化窗口

@echo off
start /min cmd /c "notepad"
@echo off
powershell -WindowStyle Minimized -Command "notepad"

8. 批量修改文件名

@echo off
setlocal enabledelayedexpansion

rem 設(shè)置文件所在目錄路徑
set "folderPath=C:\YourFolderPath"

rem 進(jìn)入目標(biāo)目錄
cd %folderPath%

rem 循環(huán)處理每個(gè)文件
for %%F in (*) do (
    rem 獲取文件名(帶擴(kuò)展名)
    set "fileName=%%F"

    rem 移除字母部分,保留數(shù)字
    set "newFileName="
    for /L %%I in (0, 1, 9) do (
        set "newFileName=!newFileName!!fileName:%%I=!"
    )

    rem 重命名文件
    ren "%%F" "!newFileName!"
)

endlocal

9. 批量修改文件夾名

@echo off
setlocal enabledelayedexpansion

rem 設(shè)置要處理的文件夾路徑
set "folderPath=C:\Path\To\Your\Folder"

rem 遍歷文件夾
for /d %%i in ("%folderPath%\*") do (
    rem 獲取文件夾名
    set "folderName=%%~nxi"

    rem 清除字母
    set "folderNameWithoutLetters="
    for /L %%j in (0, 1, 9) do (
        set "folderName=!folderName:%%j=!"
    )

    rem 重命名文件夾
    ren "%%i" "!folderNameWithoutLetters!"
)

endlocal

參考資料:

https://www.jb51.net/article/250331.htm
http://www./news/show-3034558.html
https://www./dosmlxxsc1/wvqyr9.html
https://www.runoob.com/linux/linux-shell-variable.html
https://www./subject/windows_bat.htm?id=36
https://cloud.tencent.com/developer/article/2118950
https://www./batch_script/
https://zhuanlan.zhihu.com/p/415626343
http://t./hJaPh
http://t./3R7Be
http://t./zFfr5
http://t./JmcoH
http://t./ui048

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多