如何将变量的内容转换为字符串?
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. 06540299 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")
我有 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. 06540299 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")