【问题标题】:How can I place variable in a folder path?如何将变量放在文件夹路径中?
【发布时间】:2018-01-23 20:02:06
【问题描述】:

我正在编写一个脚本来将文件复制到当前登录的用户。我认为下面的代码可以工作,但我需要用变量 $CurrentLoggedinUser 替换“用户名”。

C:\Users\用户名\AppData\LocalLow\Sun\Java\Deployment\security 像这样 C:\Users\$CurrentLoggedinUser\AppData\LocalLow\Sun\Java\Deployment\security

知道我该怎么做吗? TIA

$CurrentLoggedinUser = $env:UserName
Copy-Item -Path **/*.CERTS -Destination C:\Users\username\AppData\LocalLow\Sun\Java\Deployment\security 

【问题讨论】:

  • $env:UserProfile + '\AppData\LocalLow\Sun\Java\Deployment\security'
  • 试试Get-ChildItem($MyInvocation.MyCommand.Path) -Directorythis answer
  • @AluanHaddad:也许您的意思是Split-Path -Parent $MyInvocation.MyCommand.Path 获取脚本的文件夹?或者,在 PSv3+ 中,$PSScriptRoot?
  • 可能我不是一个非常高级的 Powershell 用户。我建议的命令在我测试时有效,但也许我误解了一些东西。

标签: powershell


【解决方案1】:

您的问题更笼统地涉及如何将变量引用合并到命令参数/字符串中

在最简单的情况下,只需将文字部分替换为 $var 引用,其中 var 是感兴趣的变量的名称:

C:\Users\$CurrentLoggedinUser\AppData\LocalLow\Sun\Java\Deployment\security

为了增加健壮性,请将名称括在{...} 中,以便后续字符。不能被误认为是名称的一部分:

C:\Users\${CurrentLoggedinUser}\AppData\LocalLow\Sun\Java\Deployment\security

当然,你也可以直接引用环境变量:

C:\Users\${env:USERNAME}\AppData\LocalLow\Sun\Java\Deployment\security

或者,给定当前用户的个人资料目录。可通过$env:USERPROFILE 访问:

$env:USERPROFILE\AppData\LocalLow\Sun\Java\Deployment\security

以上所有内容都作为命令参数,也就是说,在以参数模式而不是表达式模式 - 见Get-Help about_Parsing

表达式模式中,你需要引用上面的字符串;为了合并变量引用(甚至是通过$(...) 的整个命令的输出),您必须加倍 - 引用它们(这使得它们成为所谓的可扩展 字符串 -见Get-Help about_Quoting_Rules)。

注意只有带引号的字符串也可以在参数模式下工作,对于包含在参数模式下具有特殊含义的字符的字符串(例如 &@>),可能需要使用它们。

因此,上面的等价物就是:

"$env:USERPROFILE\AppData\LocalLow\Sun\Java\Deployment\security"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-29
    • 2020-10-25
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多