【问题标题】:Passing a .txt file to a Powershell command将 .txt 文件传递​​给 Powershell 命令
【发布时间】:2019-03-23 13:09:28
【问题描述】:

我正在尝试通过 powershell 将带有参数的 .txt 文件传递​​给 .exe 文件。目前,这就是我所拥有的。

Write-Host "starting upgrade at $(Get-Date -format 'U')"


C:\dev\temp.exe.exe /DIR="C:\TEST" /BTPServerHost="Test" /DBInstance="testDB" /Log=C:\path\to\test\testlog.txt

这是在 InnoScript 文件中调用一个接受命令行输入的函数。

如何格式化 .txt 文件,以及如何将其传递到 .exe?任何帮助,将不胜感激!谢谢!

【问题讨论】:

  • 不知道你的问题是什么。请重试。
  • PowerShell 没有输入重定向运算符。您需要批量执行此操作。
  • @TheIncorrigible1 虽然没有输入重定向运算符,但有一个管道运算符可用于此:stackoverflow.com/q/11447598/850848
  • Martin,我只是想将带有参数的 input.txt 文件传递​​到可执行文件中。我的输入文件中的参数用于自动填充安装向导。
  • 那么你想在 PowerShell 中做什么,C:\dev\temp.exe < input.txt 在批处理文件中做什么?

标签: powershell automation parameter-passing inno-setup


【解决方案1】:

如果您是说,在这个文本文件中,各个行上只有这些参数行,您是说您已经尝试过类似下面的方法但没有成功?

消息行也不需要 Write-Host,因为默认输出到屏幕。您通常只需要 Write-Host 来为屏幕文本着色,以及其他一些格式化案例,具体取决于您在做什么。总之,应该避免 Write-Host。

"starting upgrade at $(Get-Date -format 'U')"
($ConsoleCommand = Get-Content -Path 'd:\temp\input.txt' -Raw)

# Results - showing the commands in the file before process them

whoami
get-date
'hello world'

不使用 -Wait 开关,这将生成 3 个带有结果的独立 PowerShell 控制台

ForEach($CmdLine in $ConsoleCommand)
{ Start-Process -FilePath powershell -ArgumentList "-NoExit","-Command  &{ $CmdLine }" }

您当然可以指向您的 .exe 与我在这里所做的事情。

Start-Process

通过在指定 .txt 文件路径后添加 -Raw,它会忽略换行符并在一个字符串中返回文件的全部内容,并保留换行符。默认情况下,文件中的换行符用作分隔符,将输入分隔为字符串数组。

【讨论】:

  • 感谢您的回复。使用 .exe 运行此命令时,它会为文本文件中的每个参数带来一个新的安装程序实例。所以我每次运行脚本时都会打开多个安装向导窗口。关于只运行一个可执行文件实例的任何想法?
  • 而且你应该因为命令是作为列表提供的。如果列表中的每一项都是 exe 的参数字符串,那么它们都应该是一行,因此 al 在一次调用中传递。
【解决方案2】:

此脚本从 txt 文件中获取参数并将它们传递到可执行文件中,并自动填充安装向导中的字段。这就是我想要做的,但我不想为输入 txt 文件中的每个参数启动一个新进程。

Write-Host "starting upgrade at $(Get-Date -format 'U')" Get-Content -Path C:\TestInput.txt -Raw | foreach {Start-Process C:\dev\test.exe -ArgumentList $_}

传入的TestInput.txt文件如下所示:

 /DIR="C:\TEST" 
 /ServerHost="Test" 
 /DBInstance="testDB" 
 /Log=C:\testlog.txt

【讨论】:

  • 这是一个怎样的答案?它是如何解决你在上面问题中描述的问题的?
  • 此脚本从 txt 文件中获取参数并将它们传递到可执行文件中并自动填充安装向导中的字段。它有效,但我不想为输入 txt 文件中的每个参数启动一个新进程
  • 然后编辑您的答案并解释它如何解决问题,而不是在评论中这样做。没有解释的代码转储(特别是当它与问题中的问题代码非常相似时)似乎不是答案。您应该解释更改是什么以及为什么或如何解决原始问题。 (您也不应该在答案中添加新问题描述,因为它是新问题而不是答案。)
猜你喜欢
  • 2018-09-16
  • 1970-01-01
  • 2010-11-20
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 2020-09-08
相关资源
最近更新 更多