我试图编写一个简单的脚本,允许我检查一个目录,并找到任何匹配的文件名。 一旦找到匹配项,我只想将curent日期时间附加到文件名的前面。
这听起来很简单,但我无法弄清楚
到目前为止我已经
了$directory = "c:\directoryName\"
$filename = "filename.log"
$d = Get-Date -format "yyyyMMddHHmm"
get-childitem -Path $cfg_logDirectory | foreach-object
{
if ($_.name -eq $cfg_fileName)
{
$fname = $_.name
Rename-Item -NewName $d."_".$fname
}
}
但是当我运行这个(至少在ISE中)时,我会看到一个窗口,要求我
"命令管道位置2处的Cmdlet ForEach-Object - 供应值 对于以下参数:Process [0]"
这是要走的路,或者有更好的方法吗?
答案 0 :(得分:4)
将您的开口花括号移动到上一行的末尾。
get-childitem -Path $cfg_logDirectory | foreach-object {
你得到了这个错误,因为Powershell假设该行的结尾是语句的结尾,然后尝试提示你输出foreach-object的缺失参数 - 在这种情况下,它的脚本块*。将左大括号移动到同一行告诉Powershell有更多的陈述。
*为什么'过程'? foreach-object cmdlet可以将三个脚本块作为参数:Begin
,Process
和End
。 Begin和End是可选的,但需要Process。如果提供没有名称的脚本块,则假定它是Process。