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 包含用户之前输入的垃圾。
我必须对下面代码摘录中的 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 包含用户之前输入的垃圾。