繁体   English   中英

Powershell 变量分配问题

[英]Powershell Variable assigning issue

我正在尝试将复制项 function 中的目标设为 $path 并继续遇到语法错误。

Function movefiles($dayhash){
    foreach ($h in $dayhash.GetEnumerator() )
    {
        $path = "$formsfolderDaily Checklists\$today_($h.Value)"
        Copy-Item $formsfolder$($h.Value) -Destination $formsfolder"Daily Checklists\"$today"_"$($h.Value)
        editDate($path)
    }

期望的结果

Function movefiles($dayhash){
    foreach ($h in $dayhash.GetEnumerator() )
    {
        $path = $formsfolder + "Daily Checklists\" + $today + "_" + ($h.Value)
        Copy-Item $formsfolder$($h.Value) -Destination $path
        editDate($path)
    }

$path = "$formsfolderDaily Checklists\$today_($h.Value)"

这让我觉得$FormsFolder是一个带有尾部反斜杠的路径变量——但这只是一个猜测——这也是 Join-Path 如此有用的原因之一。

当您开始构建复杂的扩展字符串时,也很难知道什么是文字以及变量名称的一部分。 我建议使用-f (格式运算符) ,它可以很好地分隔字符串的文字部分和变量部分。 我对上述内容的最佳猜测是:

  • $path = '{0}Daily Checklists\{1}_{2}' -f $formsfolder, $today, $h.Value

您的模板字符串位于运算符的左侧,具有{0}{1}等格式的零索引占位符。占位符对应于在列表中找到的变量/表达式/函数调用运算符的右侧。

听起来您想使用可扩展(双引号)字符串( "..."来实现您的解决方案

为此,您需要遵守两个基本规则

  • 为了从后续字符中区分变量名称,请将它们的名称括在{...}中,例如$[today}而不是$today

    • 值得注意的是, _是 PowerShell 变量名称中的合法字符,因此如果_跟随变量引用{...}也是需要的。
  • 为了在"..."中嵌入表达式- 例如$h.Value - ,请将它们括在$(...)中,即子表达式运算符

    • 您已经在问题中部分完成了此操作,但第一个命令缺少$ before ( .
  • 有关 PowerShell 字符串插值规则的完整概述,请参阅此答案

此外:

  • 您正在使用由不带引号和带引号的部分组成的复合标记来形成单个字符串参数,在 PowerShell 中最好避免这种情况 - 请参阅此答案

  • 相反,请使用单个, "..." -enclosed string

因此(假设$formsfolder的值以\ (或/ )结尾):

Function movefiles($dayhash) {
  foreach ($h in $dayhash.GetEnumerator() ) {
    $path = "${formsfolder}Daily Checklists\$today_$($h.Value)"
    Copy-Item "${formsfolder}$($h.Value)" -Destination "${formsfolder}Daily Checklists\${today}_$($h.Value)"
    editDate $path
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM