【问题标题】:save PowerShell command in variable and execute in cmd将 PowerShell 命令保存在变量中并在 cmd 中执行
【发布时间】:2021-11-18 08:53:20
【问题描述】:

我想将 PowerSell 命令保存在变量中并在 cmd 中执行 问题:使用 exe 文件获取当前路径:$(get-location).Path

我尝试了这个但没有用:

Set $path = powershell -Command $(get-location).Path
echo "$path"

【问题讨论】:

  • 此代码在cmd.exepowershell.exe 中不起作用。我建议不要以美元符号 ($) 字符开头的环境变量名称。是的,它可以工作,但它可能会导致混乱。此外,PATH 是一个定义良好的系统变量,通常不应重新定义。当然不是执行搜索路径以外的任何东西。
  • cmd.exe 中,使用SET "MY_VAR=value"。注意引号字符的使用和放置。但是,对于这个问题,最好在FOR 循环中使用该值。不要在等号字符之前放置空格字符。如果完成,将创建变量MY_VAR 。注意变量名末尾的空格字符。

标签: powershell cmd


【解决方案1】:

尝试类似的命令行,注意我们需要使用^)转义第一个)

C:\Users\K\Desktop>for /f "delims=" %c in ('powershell -Command $(get-location^).Path') do @set "$path=%c"

C:\Users\K\Desktop>echo %$path%
C:\Users\K\Desktop

C:\Users\K\Desktop>

所以在批处理文件中使用

for /f "delims=" %%c in ('powershell -Command $(get-location^).Path') do @set "$path=%%c"
echo %$path%

但是有许多更简单的方法可以找到当前目录。

建议避免任何与“路径”非常相似的变量名称,例如 $path,因为它可能会被下游应用程序剥离 $ 误解,但在 cmd 级别最简单的方法是使用 %cd% 值: -

C:\Users\K\Desktop>set "ExDir=%cd%" & echo %ExDir%
C:\Users\K\Desktop

C:\Users\K\Desktop>

在批处理文件中通常使用 pushd 和 popd 并存储 %~dp0 但是在命令行中 popd 可能没有要返回的目录堆栈,因此可以使用此方法。

C:\Users\K\Desktop>set "PopDir=%cd%"

C:\Users\K\Desktop>cd /d h:

H:\>echo doing somthing in %cd%
doing somthing in H:\

H:\>cd /D "%PopDir%"

C:\Users\K\Desktop>

【讨论】:

    【解决方案2】:

    这是另一种没有 Invoke-Expression 但有两个变量(命令:字符串和参数:数组)的方法。这对我来说可以。假设 7z.exe 在系统路径中。

    $cmd = '7z.exe'
    $prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'
    
    & $cmd $prm
    

    如果命令是已知的 (7z.exe) 并且只有参数是可变的,那么就可以了

    $prm = 'a', '-tzip', 'c:\temp\with space\test1.zip', 'C:\TEMP\with space\changelog'
    
    & 7z.exe $prm
    

    顺便说一句,带有一个参数的 Invoke-Expression 也适用于我,例如这行得通

    $cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'
    
    Invoke-Expression $cmd
    

    附:我通常更喜欢使用参数数组的方式,因为以编程方式编写比为 Invoke-Expression 构建表达式更容易。

    【讨论】:

    • 我不会执行参数,首先,我想将PowerShell存储在一个变量中并在cmd中做回显,谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-06-30
    • 2023-03-26
    • 1970-01-01
    • 2020-09-10
    • 2021-11-18
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    相关资源
    最近更新 更多