模板信息
我喜歡在腳本的頂部添加一段文檔趾徽,用來(lái)描述 who/what/when/why/how。你可以使用::
技巧锋八,是文檔的可讀性更高珊泳。
:: Name: MyScript.cmd
:: Purpose: Configures the FooBar engine to run from a source control tree path
:: Author: stevejansen_github@icloud.com
:: Revision: March 2013 - initial version
:: April 2013 - added support for FooBar v2 switches
@ECHO OFF
SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
:: variables
SET me=%~n0
:END
ENDLOCAL
ECHO ON
@EXIT /B 0
基于成功/失敗的條件命令
使用||
和&&
邏輯運(yùn)算符眼刃,可以方便的將兩行命令寫(xiě)在一行。
使用&&
連接的兩條命令,當(dāng)?shù)谝粭l執(zhí)行成功之后(%ERRORLEVEL%
是0)契沫,緊接著會(huì)執(zhí)行第二條命令。
DIR myfile.txt >NUL 2>&1 && TYPE myfile.txt
||
則相反吼畏,當(dāng)?shù)谝粭l命令執(zhí)行失敗后督赤,執(zhí)行第二條命令。
DIR myfile.txt >NUL 2>&1 || CALL :WARNING file not found - myfile.txt
也可以把這兩個(gè)技巧結(jié)合起來(lái)使用泻蚊,通過(guò)()
來(lái)構(gòu)造躲舌,當(dāng)?shù)谝粭l執(zhí)行失敗后,執(zhí)行()
中的兩條語(yǔ)句性雄。
DIR myfile.txt >NUL 2>&1 || (ECHO %me%: WARNING - file not found - myfile.txt >2 && EXIT /B 1)
獲取腳本文件的父級(jí)目錄完整路徑
:: variables
PUSHD "%~dp0" >NUL && SET root=%CD% && POPD >NUL
讓腳本暫停
可以通過(guò)ping.exe
來(lái)模擬一個(gè)類(lèi)似UNIX的sleep
功能没卸。
:: sleep for 2 seconds
PING.EXE -N 2 127.0.0.1 > NUL
支持“雙擊”執(zhí)行(從Windows資源管理器調(diào)用)
測(cè)試一下%COMSPEC%
與%CMDCMDLINE%
是否相同,如果相同秒旋,那就可以認(rèn)為约计,腳本是運(yùn)行在一個(gè)交互的會(huì)話中。如果不相同迁筛,我們需要在腳本的末尾加上PAUSE
命令煤蚌,用來(lái)演示的結(jié)果,否則命令提示符窗口在腳本運(yùn)行結(jié)束會(huì)自動(dòng)關(guān)閉细卧。
@ECHO OFF
SET interactive=0
ECHO %COMSPEC% | FINDSTR /L %CMDCMDLINE% >NUL 2>&1
IF %ERRORLEVEL% == 0 SET interactive=1
ECHO do work
IF "%interactive%"=="0" PAUSE
EXIT /B 0