如何将变量的内容转换为字符串?

How to convert the contents of a variable to a string?

我有 5 个变量和 3 个文件。

$NumOne = Read-Host 'Enter four digit numone'
$NumTwo = Read-Host = 'Enter two digit numtwo'
$sdataJRN= $NumOne + $NumTwo + "00" + ".jrn"
$sdataJNM = $NumOne + $NumTwo + "00" + ".jnm"
$sdataTXN = $NumOne + $NumTwo + "00" + ".txn"

现在三个文件分别是06540200.jnm和jrn和txn。

我想重命名这些文件中的每一个。而不是最后是 00 我想要 99. 06540​​299 jrn jnm txn

我正在使用以下几行来执行此操作:

Rename-Item $sdataJRN -NewName $NumOne,$NumTwo,"99",".jrn"

Rename-Item $sdataJNM -NewName $NumOne,$NumTwo,"99",".jnm"

Rename-Item $sdataTXN -NewName $NumOne,$NumTwo,"99",".txn"

这returns一个错误。

重命名项目:无法将 'System.Object[]' 转换为参数 'NewName' 所需的类型 'System.String'。不支持指定的方法。
在 line:1 char:34
+ 重命名项目 $sdataJRN[0] -NewName <<<< $storeNum,$regNum,"99",".jrn"
    + CategoryInfo : InvalidArgument: (:) [重命名项目], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.RenameItemCommand

您正在寻找的是一个 delay-bind script block,它允许您从每个输入对象中导出一个参数值:

注意:在您的代码中,假设输入文件位于当前目录中。

$sdataJRN, $sdataJNM, $sdataTXN |
  Rename-Item -NewName { $_ -replace '00\.([^.]+)$', '99.' }

{ ... } 是一个延迟绑定 脚本块 ,它 对每个输入对象 进行评估,并且在其中自动变量 $_ 指的是手边的输入对象。

-replace 运算符对正则表达式(正则表达式)进行运算:

  • 00\.([^.]+)$ 在文字 . (\.) 之前匹配 00,后跟一个或多个非文字字符 . ([^.]) 在字符串的末尾 ($).

  • 通过将 [^.]+ 包含在 (...) 中,捕获匹配项(在本例中为文件扩展名),以便在替换操作数中将其引用为 </code>,即 <em>1st</em>(并且仅在这种情况下)<em>捕获组</em>。</p></li> <li><p>替换操作数 <code>99. 然后替换正则表达式与文字 99. 匹配的所有内容,后跟 </code> 的值,即第一次捕获的值组,即输入文件扩展名。</p></li> </ul> <hr> <p>至于<strong>你试过的</strong>:</p> <blockquote> <p><code>Rename-Item $sdataJRN -NewName $NumOne,$NumTwo,"99",".jrn"

    $NumOne,$NumTwo,"99",".jrn" 不是字符串连接操作,它创建了一个 4 元素数组,由于使用了 ,,PowerShell 的数组构造运算符。

    由于 -NewName 运算符是 [string] 类型的 - 即 单个字符串 ,试图传递 数组 失败。

    对于特定的输入名称,您可以使用 可扩展字符串 来合成 -NewName 参数:

    Rename-Item $sdataJRN -NewName "${NumOne}${NumTwo}99.jrn"
    

    也就是说,上面的延迟绑定解决方案提供了更大的灵活性。

尝试使用以下代码重命名项目:

Rename-Item $sdataJRN -NewName ($NumOne + $NumTwo + "99" + ".jrn")

Rename-Item $sdataJNM -NewName ($NumOne + $NumTwo + "99" + ".jnm")

Rename-Item $sdataTXN -NewName ($NumOne + $NumTwo + "99" + ".txn")