腳本與批處理合二為一
更新時(shí)間:2012年05月16日 15:00:48 作者:
我們現(xiàn)在可以用JScript或VBScript來(lái)完成更復(fù)雜的工作,配合WMI,可以說(shuō)是無(wú)所不能
批處理是我們管理計(jì)算機(jī)和進(jìn)行一些日常工作的好幫手,隨著Windows的升級(jí),批處理能做的事情越來(lái)越多。但是還是有很多事情我們無(wú)法用批處理來(lái)完成。好在后來(lái)微軟在windows中加入了Windows Script Host,我們現(xiàn)在可以用JScript或VBScript來(lái)完成更復(fù)雜的工作,配合WMI,可以說(shuō)是無(wú)所不能。WSH腳本用CScript.exe或WScript.exe來(lái)執(zhí)行,CScript.exe和WScript.exe有一些參數(shù),設(shè)置不同的參數(shù)對(duì)運(yùn)行的結(jié)果可能會(huì)有影響。我就曾發(fā)現(xiàn)有的腳本在使用缺省解釋器 (WScript.exe)和缺省參數(shù)不能得到我想要的結(jié)果。這樣當(dāng)我寫(xiě)好一個(gè)腳本給別人使用時(shí)還得大費(fèi)口舌解釋該用CScript.exe還是 WScript.exe運(yùn)行,該配哪些參數(shù)。怎么解決這個(gè)問(wèn)題呢?有一個(gè)方法: 另寫(xiě)一個(gè)批處理文件,用適當(dāng)?shù)姆绞絹?lái)運(yùn)行這個(gè)腳本。不過(guò)這樣我就需要有兩個(gè)文件。能不能只用一個(gè)文件呢?能!將腳本和批處理融為一體!,不但可以解決上述問(wèn)題,還可以同時(shí)利用批處理和WSH各自的優(yōu)勢(shì)。
思路是把批處理語(yǔ)句放在腳本的注釋里。JScript可以用/* */將一段文字作為注釋,所以我選擇了JScript。但/* */在批處理中是非法字符,怎么才能將其引入而沒(méi)有任何不需要的錯(cuò)誤提示呢?
我們需要一個(gè)批處理和JScript都接受的且沒(méi)什么用的語(yǔ)句將/* 引入。JScript中有這樣的語(yǔ)句 @set @varname=value,而批處理中也有: set varname=value, 批處理中可以在語(yǔ)句前面加個(gè)@,表示此句不輸出。這就是我們需要的!至于*/很好辦,用 @rem */即可。
請(qǐng)看下面的代碼(擴(kuò)展名為bat),很簡(jiǎn)單。
@set @this_call_started=1 /*
@echo off
@rem 允許CMD.EXE擴(kuò)展功能
@SETLOCAL ENABLEEXTENSIONS
@rem 允許CMD.EXE延遲展開(kāi)環(huán)境變量
@SETLOCAL ENABLEDELAYEDEXPANSION
...
批處理語(yǔ)句寫(xiě)在這里
...
@rem "%~dpnx0" 擴(kuò)展批處理文件自身的文件名為帶完整路徑的文件名
@rem %* 批處理文件自身的所有參數(shù)
@rem 重新將本文件作為腳本文件調(diào)用
@call CScript.EXE "%~dpnx0" //Nologo //e:jscript %*
...
批處理語(yǔ)句寫(xiě)在這里
...
@goto end_this_call
@rem */
//Windows Script Start==================================================
...
腳本語(yǔ)句寫(xiě)在這里
...
//Windows Script end=====================================================
/*
:end_this_call
...
批處理語(yǔ)句寫(xiě)在這里
...
@set @this_call_started=
@rem */
思路是把批處理語(yǔ)句放在腳本的注釋里。JScript可以用/* */將一段文字作為注釋,所以我選擇了JScript。但/* */在批處理中是非法字符,怎么才能將其引入而沒(méi)有任何不需要的錯(cuò)誤提示呢?
我們需要一個(gè)批處理和JScript都接受的且沒(méi)什么用的語(yǔ)句將/* 引入。JScript中有這樣的語(yǔ)句 @set @varname=value,而批處理中也有: set varname=value, 批處理中可以在語(yǔ)句前面加個(gè)@,表示此句不輸出。這就是我們需要的!至于*/很好辦,用 @rem */即可。
請(qǐng)看下面的代碼(擴(kuò)展名為bat),很簡(jiǎn)單。
復(fù)制代碼 代碼如下:
@set @this_call_started=1 /*
@echo off
@rem 允許CMD.EXE擴(kuò)展功能
@SETLOCAL ENABLEEXTENSIONS
@rem 允許CMD.EXE延遲展開(kāi)環(huán)境變量
@SETLOCAL ENABLEDELAYEDEXPANSION
...
批處理語(yǔ)句寫(xiě)在這里
...
@rem "%~dpnx0" 擴(kuò)展批處理文件自身的文件名為帶完整路徑的文件名
@rem %* 批處理文件自身的所有參數(shù)
@rem 重新將本文件作為腳本文件調(diào)用
@call CScript.EXE "%~dpnx0" //Nologo //e:jscript %*
...
批處理語(yǔ)句寫(xiě)在這里
...
@goto end_this_call
@rem */
//Windows Script Start==================================================
...
腳本語(yǔ)句寫(xiě)在這里
...
//Windows Script end=====================================================
/*
:end_this_call
...
批處理語(yǔ)句寫(xiě)在這里
...
@set @this_call_started=
@rem */
相關(guān)文章
Macromedia Flex 標(biāo)記語(yǔ)言簡(jiǎn)介
Macromedia Flex 標(biāo)記語(yǔ)言簡(jiǎn)介...2007-01-01
Verilog關(guān)鍵詞的多分支語(yǔ)句實(shí)例詳解
這篇文章主要為大家介紹了Verilog關(guān)鍵詞的多分支語(yǔ)句實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
服務(wù)啟動(dòng)項(xiàng)Start類型詳解
這篇文章主要介紹了服務(wù)啟動(dòng)項(xiàng) Start類型詳解,需要的朋友可以參考下2022-11-11

