我正在编写一个脚本来将文件复制到当前登录的用户。我认为下面的代码可行,但我需要替换"用户名"使用变量$ CurrentLoggedinUser。
C:\ Users \用户名\应用程序数据\ LocalLow \太阳\爪哇\部署\安全 这样的事情 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
答案 0 :(得分: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
以上所有工作都是参数到命令,也就是说,在参数模式中进行解析而不是< em>表达模式 - 请参阅Get-Help about_Parsing
。
在表达式模式中,您需要引用字符串,例如上面的字符串;为了合并变量引用(甚至整个命令的输出来自$(...)
),你必须双 - 引用它们(这使它们成为所谓的可扩展字符串 - 请参阅Get-Help about_Quoting_Rules
)。
请注意,引用的字符串也只能在参数模式下工作,对于包含在参数模式中具有特殊含义的字符的字符串,可能需要使用它们,例如&
,@
或{{1 }}
因此,上述内容完全相同:
>