欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

常用的bat批處理腳本大全(精選)

 更新時(shí)間:2023年10月19日 11:10:27   作者:luffy5459  
這篇文章主要給大家介紹了常用的bat批處理腳本大全,?bat批處理腳本是一門比較冷門的腳本語言,適用于windows,文中整理的非常詳細(xì),需要的朋友可以參考下

前言

在windows上編程或者制作一些小工具,少不了使用批處理腳本,而且在各種開發(fā)環(huán)境搭建中我們經(jīng)常會(huì)看到批處理腳本。批處理腳本以cmd命令為基礎(chǔ),增加一些變量和參數(shù)構(gòu)造多命令來完成復(fù)雜的任務(wù)。

1、echo

echo就是跟所有語言相似的輸出打印命令,一般我們會(huì)在前面加上@前綴,表示不會(huì)顯示打印語句。

C:\Users\buejee\Desktop\battutorial>for %i in (1,3,5) do echo %i
 
C:\Users\buejee\Desktop\battutorial>echo 1
1
 
C:\Users\buejee\Desktop\battutorial>echo 3
3
 
C:\Users\buejee\Desktop\battutorial>echo 5
5
 
C:\Users\buejee\Desktop\battutorial>for %i in (1,3,5) do @echo %i
1
3
5

我們也會(huì)調(diào)用@echo off關(guān)閉顯示打印信息,這樣后面的所有echo就不用加@前綴來隱藏命令。

C:\Users\buejee\Desktop\battutorial>type bat_echo.bat
echo hello
@echo off
echo world
C:\Users\buejee\Desktop\battutorial>bat_echo.bat
 
C:\Users\buejee\Desktop\battutorial>echo hello
hello
world

在這個(gè)示例中,第一次沒有設(shè)置@echo off,運(yùn)行腳本,回顯了echo hello,但是當(dāng)運(yùn)行echo world的時(shí)候,它沒有回顯,因?yàn)橐呀?jīng)關(guān)閉了回顯。

echo表示輸出,那么輸入怎么辦?這里要借助一個(gè)小技巧set /p 

@echo off
echo please input you name:
set /p name=
echo your name is : %name%

運(yùn)行: 

echo還可以結(jié)合>與>>命令向文件中寫入和追加內(nèi)容。 

C:\Users\buejee\Desktop\battutorial>echo hello > hello.txt
 
C:\Users\buejee\Desktop\battutorial>echo world >> hello.txt
 
C:\Users\buejee\Desktop\battutorial>type hello.txt
hello
world
 
C:\Users\buejee\Desktop\battutorial>echo hello,world > hello.txt
 
C:\Users\buejee\Desktop\battutorial>type hello.txt
hello,world
 
C:\Users\buejee\Desktop\battutorial>

其實(shí)這個(gè)示例里面隱含了一個(gè)操作,就是如果hello.txt文件不存在就創(chuàng)建,存在就覆蓋或者追加。在linux下,我們新建一個(gè)文件可以使用touch命令,在windows命令行下,創(chuàng)建文件可以使用echo > xxx.txt 就可以了。 

值得一提的是,因?yàn)閏md命令行默認(rèn)編碼是ANSI(936),而批處理腳本默認(rèn)編碼是UTF8(65001),所以在bat文件中使用echo輸出中文會(huì)亂碼。解決辦法:要么改變cmd編碼,要么改變腳本編碼為ANSI。

改變腳本編碼,可以在notepad++里面直接使用 "編碼" 菜單項(xiàng):轉(zhuǎn)為 ANSI 編碼 修改,再一個(gè)辦法就是通過記事本打開腳本,然后“另存為”的時(shí)候選擇編碼 ANSI,如下所示:

2、注釋

任何語言都有注釋,批處理腳本語言也不例外,它的注釋,就是使用關(guān)鍵字REM,一般帶上@前綴。

在這個(gè)圖中,可以看到,當(dāng)使用REM關(guān)鍵字的時(shí)候,這一行內(nèi)容就已經(jīng)變?yōu)榫G色高亮,明顯與可以執(zhí)行的語句有區(qū)別。 

3、常見cmd命令

windows命令行功能描述linux終端
cd切換工作目錄cd
dir列出當(dāng)前文件夾下所有文件ls [-lh]
type查看文件內(nèi)容cat
md/mkdir創(chuàng)建目錄mkdir
del刪除文件rm
rd刪除目錄rm -r
copy/xcopy拷貝cp [-r]
cls清屏clear
findstr根據(jù)關(guān)鍵字查找grep
move/rename移動(dòng)/重命名mv/rename
tasklist查找進(jìn)程ps [-ef]
taskkill 殺死進(jìn)程kill [-9]

4、參數(shù)與變量

在執(zhí)行腳本的時(shí)候,我們可以在腳本后面跟上一些參數(shù),這些參數(shù)我們在腳本中通過%1、%2、%3、%4依此類推類獲取。

@echo off
@echo first param is %1
@echo second param is %2
@echo third param is %3
@echo fourth param is %4

運(yùn)行腳本,打印如下: 

C:\Users\buejee\Desktop\battutorial>bat_params.bat hello world 3 4
first param is hello
second param is world
third param is 3
fourth param is 4

bat腳本參數(shù)只能表示%1~%9,也就是最多可以表示出9個(gè)參數(shù)。

從這個(gè)腳本顯示的樣子可以看出,當(dāng)表示%10的時(shí)候,其實(shí)已經(jīng)無法表示了,只是表示%1后面拼接了一個(gè)0,所以第十個(gè)參數(shù)是10,第十一個(gè)參數(shù)是11,第十二個(gè)參數(shù)是12。

C:\Users\buejee\Desktop\battutorial>bat_params.bat 1 2 3 4 5 6 7 8 9 9 9 9
first param is 1
second param is 2
third param is 3
fourth param is 4
fifth param is 5
sixth param is 6
seventh param is 7
eighth param is 8
ninth param is 9
tenth param is 10
eleventh param is 11
twelfth param is 12

解決辦法就是需要將前面的參數(shù)彈出。使用shift /1

代碼:

@echo off
@echo first param is %1
@echo second param is %2
@echo third param is %3
@echo fourth param is %4
@echo fifth param is %5
@echo sixth param is %6
@echo seventh param is %7
@echo eighth param is %8
@echo ninth param is %9
shift /1
@echo tenth param is %9
shift /1
@echo eleventh param is %9
shift /1
@echo twelfth param is %9

運(yùn)行結(jié)果:

C:\Users\buejee\Desktop\battutorial>bat_params.bat 1 2 3 4 5 6 7 8 9 100 101 199
first param is 1
second param is 2
third param is 3
fourth param is 4
fifth param is 5
sixth param is 6
seventh param is 7
eighth param is 8
ninth param is 9
tenth param is 100
eleventh param is 101
twelfth param is 199

變量賦值與取值:

變量賦值語句使用“=”,且“=”兩邊沒有空格。 取值的時(shí)候使用%%包裹,這個(gè)跟我們在命令行下打印系統(tǒng)環(huán)境變量的值一樣:echo %JAVA_HOME%   

在bat腳本中,for循環(huán)的變量,我們需要使用兩個(gè)%%來表示,在cmd命令行下,可以使用一個(gè)%表示:

bat_variable_in_forloop.bat

@echo off
for %%i in (1,2,3,5) do (
  @echo %%i
)

運(yùn)行:

以上這些都是自定義變量,還有一些系統(tǒng)內(nèi)置的變量,可以方便我們在腳本中使用:

  • %cd% 當(dāng)前目錄
  • %os% 操作系統(tǒng)名稱
  • %date% 系統(tǒng)日期
  • %time% 系統(tǒng)時(shí)間
  • %username% 當(dāng)前用戶名

在操作腳本的時(shí)候,想要得到腳本相關(guān)的參數(shù):比如腳本屬性、所在盤符、全路徑名、文件名、 路徑、縮寫路徑、文件最后修改時(shí)間、擴(kuò)展名、文件大小、帶盤符路徑。就需要用到如下的變量:%~(a|d|f|n|p|s|t|x|z|dp)0。示例如下:

bat_builtin_variable.bat

@echo off
@REM attribute
@echo attr		: %~a0
@REM drive name
@echo drive		: %~d0
@REM filename
@echo filename	: %~f0
@REM name
@echo name		: %~n0
@REM path
@echo path		: %~p0
@REM short name
@echo shortname	: %~s0
@REM time(modify)
@echo time		: %~t0
@REM extension name
@echo extensionname	: %~x0
@REM size
@echo size		: %~z0
@REM drive name + path
@echo dp		: %~dp0

運(yùn)行結(jié)果如下:

從中可以看出,name沒有擴(kuò)展名后綴.bat,path沒有盤符c:,所以一般使用%~dp0來表示腳本路徑。 縮寫這里,如果一個(gè)文件夾名稱不超過6個(gè)字符,則使用原樣名稱,只有文件名稱超過6個(gè)字符,才使用縮寫,而且縮寫的名稱會(huì)變大寫。

5、for循環(huán)

for循環(huán)的語法是:

for [/d/l/r/f] %%i in () do (
  
)

 這里可以根據(jù)場景選擇不同的參數(shù):

 /d 表示獲取某一目錄下的所有文件夾

@echo off
for /d %%i in (%cd%\*) do (
  @echo %%i
)

運(yùn)行結(jié)果:

 /l 可以使用一個(gè)序列來做循環(huán),比如 (1,2,10)表示從1開始,10結(jié)束,步長為2,產(chǎn)生的序列為:(1,3,5,7,9)。(5,-1,1),表示從5開始,1結(jié)束,步長為-1,也就是遞減數(shù)列(5,4,3,2,1)。

@echo off
for /l %%i in (1 2 10) do (
  echo %%i
)

運(yùn)行結(jié)果:

 /r 可以獲取某一個(gè)目錄下所有的文件以及文件夾下的文件

@echo off
for /r %%i in (*.txt) do (
  @echo %%i
)

該腳本的意思是讀取當(dāng)前文件夾以及子文件夾下的所有.txt擴(kuò)展名的文件。與/d遍歷當(dāng)前文件夾下的文件夾不同, 它不止遍歷當(dāng)前文件夾,還遍歷子文件夾。

運(yùn)行結(jié)果:

/f 讀取文件

@echo off
for /f %%a in (user.txt) do (
	echo %%a
)

 運(yùn)行結(jié)果:

我們準(zhǔn)備的文件,user.txt里面是id,name,age三列按空格分割的五行數(shù)據(jù),最后只讀到了id這一列,因?yàn)?f默認(rèn)是按照空格分隔來讀取每一行第一列內(nèi)容。

可以增加一個(gè)"delims="的參數(shù),表示不分割讀取每一行。

@echo off
for /f "delims=" %%a in (user.txt) do (
	echo %%a
)

運(yùn)行結(jié)果:

還可以分割,并取分割之后的某幾列,增加tokens參數(shù):比如"tokens=1-3 delims= "表示按照空格分隔,取1到3列,也就是所有列,但是每一列在取的時(shí)候,需要按照%%a,%%b,%%c依次類推來取值。

@echo off
for /f "tokens=1-3 delims= " %%a in (user.txt) do (
	echo %%a - %%b - %%c
)

運(yùn)行結(jié)果:

/f 這里不僅可以讀取文件,還可以用來讀取系統(tǒng)命令執(zhí)行的結(jié)果。

@echo off
for /f "usebackq tokens=1-5 delims= " %%a in (`netstat -aon^| findstr 135`) do (
  @echo %%a - %%b - %%c - %%d - %%e
)

這段腳本讀取netstat -aon | findstr 135的結(jié)果,并按照空格分隔,取1-5列。

運(yùn)行結(jié)果:

6、函數(shù)

bat腳本里面的函數(shù)定義:采用冒號開頭,然后定義函數(shù)名。在調(diào)用的時(shí)候,使用關(guān)鍵字call,同樣的要跟上冒號:函數(shù)名。

bat腳本有個(gè)特點(diǎn),它雖然可以定義函數(shù),因?yàn)槟_本串行執(zhí)行的特點(diǎn),如果沒有跳轉(zhuǎn)指令控制的話,函數(shù)定義也會(huì)被當(dāng)作指令執(zhí)行,雖然函數(shù)沒有被調(diào)用。

如下所示的代碼,我們定義了hello、world兩個(gè)函數(shù),我們只調(diào)用了world函數(shù),但是最后運(yùn)行結(jié)果很詭異:

@echo off
 
call :world
 
 
:hello
  @echo hello
  goto :eof
 
:world
  @echo world
  goto :eof

運(yùn)行結(jié)果:

C:\Users\buejee\Desktop\battutorial>bat_func_test.bat
world
hello

要想讓上面的代碼執(zhí)行正確,我們需要在call :world函數(shù)之后增加 goto :eof的跳轉(zhuǎn)控制:

call除了可以調(diào)用函數(shù)之外,還可以調(diào)用其他腳本。

7、數(shù)組

和其他語言一樣,數(shù)組在bat腳本中,可以直接通過set 命令設(shè)置,如下所示:

@echo off
set arr=1,3,5,7,9
for %%a in (%arr%) do (
  @echo %%a
)

運(yùn)行結(jié)果:

這種方式定義的數(shù)組,卻無法通過下標(biāo)訪問,它雖然可以通過for循環(huán)遍歷并得到數(shù)組中的所有元素,但是卻不能稱為普通意義上的數(shù)組。這種一次性聲明的數(shù)組,只能是一個(gè)類數(shù)組。

在批處理腳本中,可以通過下標(biāo)訪問的數(shù)組,需要這樣來定義:

@echo off
setlocal enabledelayedexpansion
set a[0]=1
set a[1]=3
set a[2]=5
set a[3]=7
set a[4]=9
set a[5]=11
for /l %%n in (0,1,5) do (
  @echo !a[%%n]!
)

運(yùn)行結(jié)果:

這種數(shù)組,雖然可以通過下標(biāo)訪問,但是無法知道它的長度,在進(jìn)行遍歷的時(shí)候,我們不得不寫死范圍。可以通過如下的方式計(jì)算數(shù)組長度:

@echo off
set Arr[0]=1
set Arr[1]=2
set Arr[2]=3
set Arr[3]=4
set Arr[4]=5
set "x=0"
:loop
if defined Arr[%x%] (
  set /a "x+=1"
  goto loop
)
echo the length is %x%

運(yùn)行結(jié)果:

=======================================================

批處理腳本與cmd命令行密切相關(guān),所有在腳本中能夠執(zhí)行的操作,基本都可以在命令行下執(zhí)行,但是有時(shí)候,命令行與腳本也有少許差別,比如在命令行下的for循環(huán)中,變量可以直接使用一個(gè)%來表示,但是腳本中必須使用兩個(gè)%%來表示。 

總結(jié)

到此這篇關(guān)于常用的bat批處理腳本大全的文章就介紹到這了,更多相關(guān)bat批處理腳本大全內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論