※ 引述《awpboom (awp)》之銘言:
: 那我現在要把這先變數鍵入cmd裡
: 假設是arp的語法好了
: Shell("cmd.exe /c arp -s a b")
: 為什麼我的a和b在cnd裡面都讀不到
當你寫 "cmd.exe /c arp -s a b"
你應該知道這是一行字串,其中 a b 都是存在於字串中的符號,
字面上就是 "a" 與 "b".
你之前所宣告的變數 a b 與此字串的 a b 無關.
你想做的是把位址指定到 a b 二變數,
並把二變數的值插入字串中 a b 的位置,
你打 Sell("cmd.exe /c arp -s a b") 並認為 a b 應該是所輸入的位址,是天真了.
(可見你是沒有普通程式基礎的新手.)
有二種寫法,第一是用字串串接符號 &
如果你寫
Dim a As String, b As String
a = Console.ReadLine()
b = Console.ReadLine()
寫以下這行
"A: " & a & " B: " & b
程式執行時,對 a 輸入10,對 b 輸入3,上面這行就會得到一個字串
"A: 10 B: 3"
這是字串串接功能.
所以,你的程式改寫成
Dim a As String, b As String
a = Console.ReadLine()
b = Console.ReadLine()
Shell("cmd.exe /c arp -s " & a & " " & b)
就是所要的.
第二個寫法,可利用String.Format()函數.
當你寫
String.Format("A: {0} B: {1}", a, b)
程式執行時,若 a 為10,b為3,上一行會得到一個字串為
"A: 10 B: 3"
當你寫
String.Format("First: {0} Second: {1} Third: {2}", 1, 2, 3)
程式執行時,上一行會得到一個字串
"First: 1 Second: 2 Third: 3"
這二個例子,你可看出String.Format()可以有好幾個參數,
第一個參數是格式字串,描述輸出文字格式的配置;
第二個參數及其之後,是依序要插入到格式字串中指定位置的資料.
格式字串中,每一對曲線括弧,中間帶有一個數字,代表一個可插入資料的空位,
曲線括弧對中的數字,代表要將後面第幾個參數擺進此空位中,
{0}要抓第二個參數,{1}要抓第三個參數,{2}要抓第四個參數,{3}要抓第五個參數...
使用String.Format()函數,你的程式改寫成
Dim a As String, b As String
Dim cmd As String
a = Console.ReadLine()
b = Console.ReadLine()
cmd = String.Format("cmd.exe /c arp -s {0} {1}", a, b)
Shell(cmd)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.231.66.36