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

问题描述 投票:1回答:2

我有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"

现在这三个文件分别是06540​​200.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"

这将返回一个错误。

Rename-Item : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'NewName'. Specified method is not supported.
At line:1 char:34
+ Rename-Item $sdataJRN[0] -NewName <<<<  $storeNum,$regNum,"99",".jrn"
    + CategoryInfo          : InvalidArgument: (:) [Rename-Item], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.RenameItemCommand
powershell rename-item-cmdlet
2个回答
0
投票

你正在寻找的是一个delay-bind script block,它允许你获得从每个输入对象的参数值:

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

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

{ ... }是对每一输入对象评估的延迟绑定脚本块,和它内部的自动可变$_指输入物体在眼前。

-replace运营商对正则表达式(正则表达式)操作:

  • 00\.([^.]+)$字面00.),随后是一个或多个字符不处于串(\.)的端部字面.[^.])之前匹配$
  • 通过在包围[^.]+ (...),匹配 - 文件名扩展,在这种情况下 - 被捕获,以便它可以在替换操作数作为$1,即第一(并且在这种情况下,只有)捕获组来引用。
  • 然后更换操作数99.$1替换一切与文字99.匹配正则表达式,接着$1的值,即,所述第一捕获组,即,将输入的文件扩展名的值。

至于你尝试过什么:

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"

这就是说,上述延迟绑定解决方案提供了更多的灵活性。


0
投票

尝试下面的代码重新命名的项目:

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

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

Rename-Item $sdataTXN -NewName ($NumOne + $NumTwo + "99" + ".txn")
© www.soinside.com 2019 - 2024. All rights reserved.