【问题标题】:How do i get input from "textbox1" to a .bat file [closed]如何从“textbox1”获取输入到 .bat 文件 [关闭]
【发布时间】:2021-04-09 08:28:02
【问题描述】:

我是编程新手,我现在想学习 c#,我想制作一个程序,将输入“用户”放入“textbox1”到我的 test.bat 文件中

“test.bat”中的文本

Set A="textbox1.text" 
Echo %A%

这是我用文本框写的image of the ui in the visual basic

单击“button1”会启动 test.bat 并在可能的情况下在 cmd 中显示 textbox1 文本

我很想让它工作。

感谢您的帮助!!

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 那么你想用c#创建并运行一个批处理文件来在控制台中显示一条消息?这不是有点像买一辆法拉利,把它固定在你的旧大众甲壳虫上,然后用它把甲壳虫推到商店里吗?为什么不直接开着法拉利去商店呢?

标签: c# batch-file cmd


【解决方案1】:

有几种简单的方法可以解决这个问题。一是按你的要求做;将输入文本写入名为“textbox1.text”的文件(实际上应该是“textbox1.txt”,因为“.txt”是文本文件的通用后缀,而“.text”不是),然后让批处理脚本读取它。

使用Console.WriteLine() 将文本简单地写入标准输出流并让批处理文件捕获它并使用文本执行它想要的操作要容易得多。无论哪种方式,您都需要一个已知 永远不会成为输入字符的字符。

我将以第二种方法为例,但我不会使用 Forms 或 WPF。很难显示什么去哪里。不过,您似乎想要一个带有文本框的窗口,所以我将使用以下“ConsoleApp1.cs”程序并从 Visual Basic 中借用 InputBox() 函数(一个简洁的控制台 CS 技巧!):

using System;
using Microsoft.VisualBasic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string answer = Interaction.InputBox("Tell me something");
            Console.WriteLine(answer);
        }
    }
}

将其编译成 .exe 文件并将其复制到您用于运行 .bat 文件的目录中。现在在批处理文件中尝试以下操作:

rem @echo off
for /F "delims=~" %%t in ('ConsoleApp1.exe') do set a=%%t
echo.%a%

这是从 CS 程序中获取一行文本到调用它的 .bat 文件中的简单方法。如果您坚持让 CS 程序创建一个名为“textbox1.text”的文本文件,请继续。查找如何使用 StreamWriter 类来做到这一点。然后你的.bat 文件将使用稍微不同的FOR 命令形式:

for /F "delims=~" %%t in (textbox1.text) do set a=%%t

无论哪种方式,您都需要delims= 之后的字符是用户不会键入的分隔符。 FOR /F 命令始终将输入行解析为由您指定的任何分隔符(或默认为空格)分隔的标记。我使用 ~ 或 ' 作为通常不会出现在命令或文件名中的字符。

Justaus3r 提出了一个有价值的建议,即使用重定向的SET /P 命令。您可以使用它,通过上面的 CS 程序将Console.WriteLine 输出到一个变量中,而无需担心分隔符:

ConsoleApp1.exe >textbox1.text
set /P a=<textbox1.text

这行得通。将 ConsoleApp1 的输出直接传输到 SET 也应该可以工作,但由于某种原因它不能。我在 Win7 中工作但在 Win10 中没有的旧批处理文件遇到了许多问题。但是,这在 CMD 和 PowerShell 中都失败了,因此 MS 不再维护 CMD 发生了一些奇怪的事情。

【讨论】:

  • 嘿,我可能不太擅长解释哈哈,我试着像一个 .txt 制造商那样制作,我需要来自视觉工作室的“ui”的通用输入,例如我有第 10 行我希望它接受 textbox1 的输入(例如),所以它会在 .bat 文件中写入“set A=”textbox1 text“”(对不起,我来自我的手机)
【解决方案2】:

据我了解,您想使用 C# 创建一个对话框来获取用户输入并在控制台中显示,这是不可能的,但您可以将用户提供的输入存储在文件中,然后使用批处理文件阅读它。我不是 ac# 程序员,所以我不知道如何在 c# 中使用对话框,但Following link 提供了您的解决方案,然后使用以下批处理文件读取文件中的输入:

@echo off
set /p var=<file.txt
echo %var%
pause >nul

【讨论】:

  • 不错的替代 FOR /F 命令!分隔符没有问题。 (如果有人在 file.txt 中添加了多行,那么你的只会看到第一行,而我的只会记住最后一行。:^)
  • 是的,当我使用 for 循环时,我总是感到困惑,它的效率要高得多,而且 thnx
【解决方案3】:

您的愿望可以通过几行代码来满足,这些代码使用File.WriteAllText 创建文件及其内容,并使用Process.Start 方法运行它。 /k 在该页面上按 Ctrl-F,如果您无法让控制台窗口保持打开状态以实际查看消息

我将把制定要写入文件的字符串内容的任务留给你。请记住,文档通常包含有关如何使用其描述的每种方法的示例,因此可以使用现成的预编写代码源

最后的提示;将控件放在表单上后,您可以重命名控件,并且您确实应该花 2 秒时间来完成此操作,这样您就不会有一天向我们寻求充满标签 27、文本框 56 的代码的帮助 -它使包括您在内的每个人都更难以理解程序(查找“混淆”是什么),并且很容易将它们重命名为 batchFileMessageTextBoxsaveAndLaunchBatFileButton 是荒谬的

【讨论】:

  • 嘿,我已经尝试了 writeall 功能,但我无法让它与我从“文本框”的输入一起工作,谢谢你的提示:)!
  • File.WriteAllText(@"C:\temp\my.txt", "Textbox says: " + userInputTextBox.Text);
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多