windows腳本的語法

1、不想使得腳本里面的語句都輸出來,可以使用@符號,這個符號所在的語句可以隱去這一句的輸出,若想整個腳本都不輸出語句,則可以再文件的最開頭使用這一句:@echo off,如果在使用了這一句的前提下,又想是某一句顯示出來,可以這樣寫:

@echo on
echo 3
@echo off

這樣echo 3就可以將命令顯示出來
2、對變量的處理
(1)對變量的設置
給變量設置字符串值:

set var1=abcd

(2)對變量設置數字值,這個值是int類型的

set /a var2=10

這樣把var2這個變量設置成了數字10
(3)從輸入設置變量的值

set /p var3="input a number"

(4)對變量的引用

將var2的值賦值給var4

set var4=%var2%

(5)對變量的分割
一個典型的對變量的分割例子就是log文件的名稱需根據時間來建立相應的文件,一般這麼寫:

set tsp="%time:~0,1%"
if %tsp%==" " (set date_time=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%) else (
set date_time=%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%
)

首先來看一看date和time變量是什麼

echo %date%
2018/11/28 週三
echo %time%
16:40:43.32

這樣就好辦事了,首先看一下date_time=%date:~0,4%%date:~5,2%%date:~8,2%的意思,%date:~m,n%表示取從date變量的第m位(從第0位開始計數)開始之後的n位字符,在這裏就是取這樣這句話的結果就是取“2018/11/28 週三”的“2018”。
那麼tsp是幹嘛的?這個變量是測試是上午還是下午的,如果是上午,那麼時間的時這裏就只有一位,最前面是空格,而不是默認爲0,所以需要判斷,然後手動加上0這一位。

再舉一些變量分割的例子:

輸入的命令    結果        效果                    
echo %var%    1234567890 顯示所有                  
echo %var:~4%   567890   從第4個字符以後開始顯示          
echo %var:~4,3%   567      從第4個字符以後開始顯示,並只顯示前3個   
echo %var:~-4%  7890    從倒數第4個字符開始顯示          
echo %var:~-4,3% 789     從倒數第4個字符開始顯示,並只顯示前3個   
echo %var:~4,-2% 5678    從第4個字符以後開始顯示,顯示到還剩2個爲止 
echo %var:~0,3%  123     從頭開始顯示,並只顯示前3個字符      
echo %var:~0,-3% 1234567   從頭開始顯示,顯示到還剩3個字符爲止
set var2=%var:ld=ms and bugs%  將var變量中所有的ld換成ms and bugs,輸出結果賦值給var2

利用以上的規則進行一些字符串操作:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set a=  abcd
::去除左邊的空格
:left
if "%a:~0,1%"==" " set a=%a:~1% && goto left
echo %a%


::去除字符串所有的空格
set a=abcd  efg   
set a=%a: =%
echo %a%E

::去除字符串右邊的空格
set a=abcdefg 
:right
if "%a:~-1%"==" " (set a=%a:~0,-1%
echo %a%
goto right
)
echo %a%A

3、程序的控制語句
(1)if語句
首先if判斷是否兩個數值相等,數值比較有“等於”、“大於”、“大於等於”、“小於”、“小於等於”、“不等於”六種,這六種分別對應的寫法:

EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於

這些東西可以通過輸入命令 if /?查看到。
當然等於還有一種寫法就是“==”,例子:

@echo off
set /a a=1
set /a b=2
if %a% lss %b% echo aaa
if 5 gtr 4 echo bbbbb
if 3==3 echo ccccc
pause

if還有一些比較特殊的用法,比如文件是否存在和變量是否存在。例子:

if exist aaa.txt echo exist
if defined a echo %a%
@echo off
set /a a=1
if %a%==2 echo 3
pause

在這裏一定要注意,if判斷條件之後的語句一定要在同一行,否則就會報錯,如果想寫多行,可以使用圓括號,比如:

if %a%=="haha haha" (
	echo 3
)

其中“(”一定要在if的同一行
(2)for語句
通過輸入命令for /?可以大致瞭解到for語句的集中使用方法
1、類似c語言的循環

@echo off
for /l %%i in (1,1,50) do echo %%i
pause

表示i在1到50每隔1這個序列裏面取值,然後輸出i,在這裏如果寫的是腳本,則要使用%%i,而不是%i,如果直接寫在命令行裏面,則 使用%i,另外這裏的變量名必須使用單個字母的變量,一定不能有多個字母,否則會報錯。
這段語句就是輸出1到50.

2、遍歷文件

@echo off
for  %%i in (*) do echo %%i
pause

在這裏會遍歷所有當前目錄下面的文件,注意不包含目錄,目錄不會輸出。
如果想輸出當前文件夾下面所有的目錄:

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

跳轉語句
定義一個標識,然後跳轉到這個標識

:ok
goto ok
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章