2015-03-08 84 views
1

我必須對下面的代碼抽取中的if語句做出什麼更改才能按預期工作?VBScript - 在if語句中讀取環境變量

dim warn, txtfilelocate, txtcontent, file, txtfile, content 

call START 
sub START 
    do while len(txtfilelocate) = 0 
    txtfilelocate = inputbox ("Please enter the full path of the text file containing your email content", "CDO Email Sender") 
     if isempty(txtfilelocate) then 
     wscript.quit() 
     end if 
    loop 
end sub 

txtcontent = DQ(txtfilelocate) 
wscript.echo txtcontent 

set file = createobject("scripting.filesystemobject") 

    if file.fileexists(txtcontent) then 
     set txtfile = file.opentextfile(txtcontent, 1) 
     content = txtfile.readall 
     wscript.echo content 
     txtfile.close 
     call HELLO 
    else 
     warn = msgbox(txtcontent & " was not found", 0, "CDO Email Sender") 
     call START 
    end if 

sub HELLO 
    wscript.echo "hello" 
end sub 

function DQ(str) 
    DQ = chr(34) & str & chr(34) 
end function 

我懷疑它是與不斷擴大的環境變量,但作爲一個新手,我希望澄清的問題是我做錯了,什麼我應該做這個工作。謝謝。

回答

1

你txtcontent在:

if file.fileexists(txtcontent) then 

包含引用文件規範。當您使用.Run或.Exec進行抽取時,這樣的引用是很好/必要的,因爲shell的解析器使用空格/空格作爲分隔符。 FileSystemObject的方法「知道」參數是否指路徑/文件規範,並且不會被空格/空格愚弄,而是直接引用虛假引號。所以將txtcontent傳遞給.FileExists。

證據:

>> WScript.Echo goFS.FileExists(WScript.ScriptFullName) 
>> 
-1 
>> WScript.Echo goFS.FileExists(qq(WScript.ScriptFullName)) 
>> 
0 
>> 

更新WRT評論:

你的腳本仍然是一個爛攤子。除了混合頂級代碼和子/功能之外,您還可以通過從不同的上下文中調用Sub來模擬邏輯循環(重複直到啞人用戶輸入了有效的文件規範)。把 線像

WScript.Echo "START called. txtfilelocate is", DQ(txtfilelocate) 

在Sub啓動的頂部,你會看到START 輸入,但循環,因爲txtfilelocate包含用戶之前輸入的垃圾。

+0

謝謝Ekkehard,現在有道理,如果我可能會問一個後續問題...... if語句的其他部分不會調用START子例程,爲什麼? – 2015-03-08 18:34:25

+0

謝謝Ekkehard,我沒有看到do while循環要求txtfilelocate處於len = 0狀態才能啓動。我已經完全重寫了代碼中的代碼,現在它工作正常。再次感謝。 – 2015-03-08 19:37:32