VBScript - 在if语句中读取环境变量

时间:2015-03-08 17:29:41

标签: if-statement vbscript environment-variables

我必须对下面的代码提取中的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 个答案:

答案 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包含用户之前输入的垃圾