gpt4 book ai didi

powershell - 如何将多行批处理文件语句转换为Powershell?

转载 作者:行者123 更新时间:2023-12-02 23:35:07 25 4
gpt4 key购买 nike

我正在将旧的批处理文件转换为Powershell。在批处理文件中,SET命令用于声明和设置多个变量,然后调用使用这些变量以及其他标志的可执行文件。我将如何在Powershell中执行此操作?

批处理文件代码摘录:

SET VAR1=VAL1
SET VAR2=VAL2
SET VAR3=VAL3
SET VAR4=VAL4
%DIRECTORY%\%SUBDIR%\EXECUTABLE.EXE -FLAG1 -FLAG2 -FLAG3

我首先尝试声明Powershell变量并使用Start-Process调用exe,但是可执行文件正在寻找特定的变量名。我不确定在这种情况下exe是否可以看到这些变量,但是它不起作用。
  $VAR1 = VAL1
$VAR2 = VAL2
$VAR3 = VAL3
Start-Process "$DRIVE\DIR\EXECUTABLE.exe -FLAG1 -FLAG2 -FLAG3"

我也尝试将多行命令传递给命令 shell 失败:
$Command =  "CMD.exe /C 
SET VAR1=VAL1
SET VAR2=VAL2
SET VAR3=VAL3
SET VAR4=VAL4
$DRIVE\$DIR\EXECUTABLE.exe -FLAG1 -FLAG2 -FLAG3
Invoke-Expression $Command

注意**即使在DOS提示符下运行exe时,也必须在多行上设置变量。使用“&”(批处理)或“;” (Powershell)并在一行上传递所有变量不起作用。

最佳答案

  • 要让外部程序(子进程)看到变量,它们必须是环境变量:使用$env:VAR1 = 'VAL1'而不是$VAR1 = 'VAL1'-还请注意必须对值进行引用。
  • cmd.exe(批处理文件)中,所有变量始终都是环境变量。在PowerShell中,常规变量(例如$VAR1)仅对PowerShell session 本身可见。
  • 如果可执行文件名/路径被引用和/或包含变量引用,请不要使用Start-Process来调用外部控制台应用程序,而是使用&来直接调用它们(与连接到PowerShell流的标准流同步)。不要整体引用命令行;指定并(必要时)分别引用可执行文件的名称/路径和参数。
    同样, Invoke-Expression should generally be avoided

  • 因此:
      $env:VAR1 = 'VAL1'
    $env:VAR2 = 'VAL2'
    $env:VAR3 = 'VAL3'
    & "$DRIVE\DIR\EXECUTABLE.exe" -FLAG1 -FLAG2 -FLAG3

    关于powershell - 如何将多行批处理文件语句转换为Powershell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57561722/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com