基礎(chǔ)
再使用前,請多花些時間將基礎(chǔ)學(xué)好,高級的使用都是有強(qiáng)大的基礎(chǔ)作為支撐的。
- rem 是注釋
- set 命令用于設(shè)置變量(注意不要與已存在的環(huán)境變量同名)
- 命令不分大小寫
- ss64.com 英文網(wǎng)站,資料詳細(xì)
傳遞命令行參數(shù)到批外理文件
echo %%0 = %0
echo %%1 = %1
echo %%2 = %2
echo %%3 = %3
echo %%4 = %4
echo %%5 = %5
REM echo %%1 = %1
REM 上面這句表示:%%1 轉(zhuǎn)義為 %1, 而 %1 表示第一個命令行參數(shù)
參考網(wǎng)址:傳遞命令行參數(shù)到批外理文件
setlocal
開啟局部范圍,范圍結(jié)束,恢復(fù)原本變量的值。延時展開(delaed expansion), 需要使用 !var! 來展開變量,原本是這樣的 %var% 。
默認(rèn)情況下,變量擴(kuò)展只在每個循環(huán)開始時發(fā)生一次。
@echo off
set var1=jkl1
set var2=abc2
set "var1=%var2%" & set "var2=%var1%"
echo var1=%var1% \t var2=%var2%
setlocal EnableDelayedExpansion
REM setlocal EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!
REM first
endlocal
Set "_var=first"
Set "_var=second" & Echo %_var%
順序執(zhí)行命令
REM 順序執(zhí)行兩行命令
echo first & echo second
REM && 是條件運(yùn)算符,與 & 不同
echo first && echo second
for
rem 在cmd窗口中,for之后的形式變量I必須使用單百分號引用,即%i;而在批處理文件中,引用形式變量i必須使用雙百分號,即%%i。
rem 對目錄使用 for
for /d %%d in (.) do dir %%d
rem 對一類文件使用
@REM for %%f in (*.bat) do type %%f
rem 對一個文件使用
@REM ----------------------------------------------------------------------------------------------
for /f "eol=; tokens=2,3* delims=," %%i in (myfile.txt) do @echo %%i %%j %%k
for /f "tokens=1-5 delims=:," %%a in (易經(jīng).txt) do echo %%a %%b %%c %%d %%e
@REM 通俗講,共同提取每一行的第m小節(jié)的內(nèi)容。
@REM 因此,可以用該命令來指定提取文本信息。
@REM tokens=有時表示提取全部。
@REM tokens=m表示提取第m列。
@REM tokens=m,n表示提取第m列和第n列。
@REM tokens=m-n表示提取第m列至第n列。
@REM Tokens=*表示刪除每行前面的空格。忽略行首的所有空格。
@REM tokens=m*提取第m列以后的所有字符,星號表示剩余的字符。
@REM tokens=m,*提取第m列以后的所有字符,星號表示剩余的字符。
@REM 輸出變量的個數(shù)由定義了的tokens決定。
@REM 在 FOR 語句中顯式聲明 %%i。使用tokens= 隱式聲明%%j 和%%k。只要不會引起試圖聲明高于字母“z”或“Z”的某個變量,則使用tokens= 可以指定最多 26 個輸出變量。
@REM 在使用 usebackq 的情況下
@REM `dir` 作為命令
@REM “dir" 作為文件
@REM 在沒有使用 usebackq 的情況下
@REM `dir` 系統(tǒng)不能找到 dir
@REM “dir" 作為字符串
@REM usebackq 用于處理帶空格的字符串
@REM ----------------------------------------------------------------------------------------------
rem 對步長使用
for /l %%i in (1, 1, 10) do @echo %%i
@REM for /f "eol=; tokens=2,3* delims=," %i in (myfile.txt) do @echo %i %j %k
參考網(wǎng)址:http://www.rzrgm.cn/Jian-Zhang/p/6066429.html
參考網(wǎng)址:https://www.hxstrive.com/subject/windows_bat.htm?id=74
參考網(wǎng)址:http://www.rzrgm.cn/it-tsz/p/11306672.html
實(shí)現(xiàn)函數(shù)功能
call :helloworld Hello World
rem call 命令用于調(diào)用另一個腳本,或一個標(biāo)簽,后面跟的是參數(shù)
rem :helloworld 是一個標(biāo)簽,可以在定義前使用
set return_value = 0
goto :endhelloworld
rem goto 調(diào)轉(zhuǎn)到指定的標(biāo)簽
:helloworld
if 9 GTR 7 (
set return_value = 1
echo %1
) else (
set return_value = 0
)
echo 函數(shù)內(nèi)
goto :EOF
rem & 連續(xù)執(zhí)行命令
:endhelloworld
echo 函數(shù)外
得到命令執(zhí)行的結(jié)果
@echo off
set attr = ""
setlocal EnableDelayedExpansion
REM for /f "usebackq" %%i in (`dir`) do set attr=!attr!;%%i
REM for /f "usebackq eol=} delims={" %%i in (`dir`) do @echo %%i
REM for /f "usebackq eol=} delims={" %%i in (`dir`) do set attr !attr!;%%i
dir > testdir.txt
for /f %%i in (testdir.txt) do echo %%i
echo %attr%
endlocal
讀取文件內(nèi)容
rem 方法一
for /f %%i in (.\tmp.txt) do echo %%i
rem 方法二
set /P qq=<tmp.txt
字符串
@echo off
set str=abcdefghijkl
rem 前面4個字符
echo %str:~0,4%
rem 后面4個字符
echo %str:~-4%
rem 第一個到倒數(shù)第5個字符
echo %str:~0,-4%
rem 3 到 4
echo %str:~2,3%
rem 倒數(shù)第二個開始,提取5個字符
echo %str:~1,5%
rem 拼接
set str1=abc
set str2=abc
set %str3=%aa%%bb%"
rem 替換
echo %str:a=jkl%
參考網(wǎng)址:子串(substring)
參考網(wǎng)址:編輯/替換變量中的文本
日期時間
REM 時間
echo 當(dāng)前時間:%time% %time:~0,2%點(diǎn)%time:~3,2%分%time:~6,2%秒
if
獲取用戶輸入,判斷輸入是否為指定的字符:
@echo off
set /p isOk=Are you ok?(y/n):
if /i "%isOk%"=="y" call :yes_func
if /i "%isOk%"=="n" call :no_func
rem /i 大小寫不敏感的匹配
goto :eof
rem call 調(diào)用一個子程,可以傳遞參數(shù)
rem goto :eof 去到當(dāng)前批處理文件的最后,或是子程(subroutine)的最后
rem EXIT /b 有選項可以設(shè)置指定的 errorlevel, 0 表示成功;1 或更大的值,表示錯誤
rem EXIT /b 沒有退出碼,它的作用與 goto :eof 相同
:yes_func
echo yes
goto :eof
:no_func
echo no
goto :eof
參考網(wǎng)址:ss64 | if
參考網(wǎng)址:獲取輸入
參考網(wǎng)址:goto | ss64
參考網(wǎng)址:set /p 獲取整個輸入| ss64
choice | ss64
接受用戶輸入,并交給批處理文件。可以從鍵盤捕獲一個鍵的按壓。
@echo off
CHOICE /C:rg /m "choose [R]ed or [G]reen"
rem at this point the errorlevel will contain either 1 or 2
rem 在這里,errorlevel 要么是 1 ,要么是 2
goto sub_%ERRORLEVEL%
:sub_1
Echo You typed R for red.
goto:eof
:sub_2
Echo You typed G for green.
goto:eof
浙公網(wǎng)安備 33010602011771號