我必须对下面的代码提取中的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
我怀疑它与扩展环境变量有关,但作为一个新手,我希望澄清我做错了什么,以及我应该为此做些什么。感谢。
答案 0 :(得分:1)
您的txtcontent in:
if file.fileexists(txtcontent) then
包含引用的文件规范。当你使用.Run或.Exec来shell时,这样的引用很好/必要,因为shell的解析器使用空格/空格作为分隔符。 FileSystemObject的方法知道'如果一个参数意味着一个路径/文件规范,并且没有被空格/空格所欺骗,而是从字面上采用虚假引号。因此,将txtcontent传递给.FileExists。
证据:
>> WScript.Echo goFS.FileExists(WScript.ScriptFullName)
>>
-1
>> WScript.Echo goFS.FileExists(qq(WScript.ScriptFullName))
>>
0
>>
更新评论:
你的剧本仍然一团糟。除了混合顶级代码和子/函数之外,您还可以通过从不同的上下文调用Sub来模拟逻辑循环(重复直到哑用户输入了有效的文件规范)。放 像
这样的一行 WScript.Echo "START called. txtfilelocate is", DQ(txtfilelocate)
在Sub START的顶部,您会看到START 输入,但不循环,因为txtfilelocate包含用户之前输入的垃圾