【问题标题】:Passing a C# string to VBscript将 C# 字符串传递给 VBscript
【发布时间】:2011-11-26 21:26:12
【问题描述】:

我正在使用 Windows 窗体并尝试将字符串传递给 vbscript。该程序要求用户选择一个文件夹,我正在尝试选择文件夹并将其传递给 vbscript。

C#代码:

String SelectedFolder = @"C:\Users";

        folderBrowserDialog1.SelectedPath = SelectedFolder;
        if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            //Set selectedFolder equal to the folder that was choosen
            SelectedFolder = folderBrowserDialog1.SelectedPath;
    //Call VBScript
     System.Diagnostics.Process.Start(".vbsPath");

VBScript:

TargetFolder = Request.QueryString("SelectedFolder")
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(TargetFolder)
Set colItems = objFolder.Items
For Each objItem in colItems
objItem.InvokeVerbEx("Print")
Next

任何帮助将不胜感激。谢谢

【问题讨论】:

  • Request.QueryString?所以你想将字符串作为 url 参数传递给用 vbscript 编写的经典 asp 页面?
  • 对不起,我对vbscript很陌生,一直在寻找访问字符串的方法; Request.QueryString 是我发现的唯一看起来可能有效但无效的东西。有没有办法将 C# 字符串传递给 VBscript?

标签: c# .net vbscript


【解决方案1】:

C#端

使用Process.Start overload that accepts command-line parameters

System.Diagnostics.Process.Start("C:\path\to\my.vbs", selectedFolder);

如果 selectedFolder 可以包含空格(这很可能发生),则应将参数括在引号中。

System.Diagnostics.Process.Start("C:\path\to\my.vbs", 
    "\"" + selectedFolder + "\"");

事实上,如果路径可以包含引号和/或尾部反斜杠,则转义会变得更加复杂,有关详细信息,请参阅这些问题(和其他问题):Escape command line arguments in c#Passing command-line arguments in C#


VBScript 端

在您的 VBScript 中,读取第一个命令行参数:

targetFolder = WScript.Arguments.Item(0)

【讨论】:

  • 现在试试。非常感谢您的帮助!
  • 效果很好!感谢您对此的帮助!
  • @dhk:不客气!不要忘记点击我的答案旁边的复选标记,以便其他人知道这个问题已经回答了。
【解决方案2】:

您可以将字符串写入两组代码都可以访问的文件或数据库。这样,您使用哪种编程语言就无关紧要了,例如可能是 C# 到 PHP。

写入文件:

string content = "folder=" + folder;
System.IO.StreamWriter file = new System.IO.StreamWriter(@"c:\config.txt");
file.WriteLine(content);
file.Close();

读取文件:

System.IO.StreamReader file = new System.IO.StreamReader(@"c:\config.txt");
string content = file.ReadToEnd();
// extract value of folder setting here
file.Close();

(当然需要在 VB 中读取,但会非常相似。注意:代码基于:MSDN Example

【讨论】:

    【解决方案3】:

    从 VBScript 到 C# 来回转换会增加很多复杂性。如果可能的话,选择其中一个会更容易。

    你可以用 C# 做任何你可以用 VBScript 做的事情。 (您的操作方式可能不同,但您可以执行所有相同的任务 - 文件访问、数据库访问等。)如果可行,您最好只使用 C#。

    我在这里根据问题的上下文进行了一些猜测,但我试图在自己的脑海中回答您为什么要这样做,而我唯一能想到的是您不知道如何在 VBScript 中显示文件夹对话框,因此您正在尝试在 C# 中执行此操作。对吗?

    如果是这样,您可以在 VBScript 中显示一个文件夹对话框,如下所示:http://www.robvanderwoude.com/vbstech_ui_browsefolder.php

    【讨论】:

    • 感谢您的回复,我正在尝试循环浏览文件夹中的每个文件并打印它们,我知道它可以在 VB.net 中完成,但我在 C#.net 中找不到等价物。现在回想起来,我应该用不同的方式来表达这个问题(对不起,我对这个网站很陌生)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    相关资源
    最近更新 更多