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

VBScript - Read environment variable in if statement

我必须对下面代码摘录中的 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

我怀疑它与扩展环境变量有关,但作为一名新手,我希望能澄清我做错了什么,以及我应该怎么做才能让它发挥作用。谢谢

您的 txt 内容位于:

if file.fileexists(txtcontent) then

包含引用的文件规范。当您使用 .运行 或 .Exec 来 shell 时,这样的引用是 good/necessary,因为 shell 的解析器使用 blanks/spaces 作为分隔符。 FileSystemObject 的方法 'know' 如果一个参数意味着 path/file 规范并且没有被 blanks/spaces 愚弄,但从字面上采用虚假引号。因此,将不带引号的 txtcontent 传递给 .FileExists。

证据:

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

更新评论:

你的脚本还是一团糟。除了混合顶级代码和 Subs/Functions,您还可以通过从不同的上下文调用 Sub 来模拟一个逻辑循环(重复直到愚蠢的用户输入了有效的文件规范)。放 像

这样的一行
   WScript.Echo "START called. txtfilelocate is", DQ(txtfilelocate)

在 Sub START 的顶部,你会看到 START 进入的,但 不是 循环,因为 txtfilelocate 包含用户之前输入的垃圾。