powershell v2 - 在目录中查找文件并重命名

时间:2014-12-19 10:14:43

标签: powershell-v2.0 file-rename

我试图编写一个简单的脚本,允许我检查一个目录,并找到任何匹配的文件名。 一旦找到匹配项,我只想将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]"

这是要走的路,或者有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

将您的开口花括号移动到上一行的末尾。

get-childitem -Path $cfg_logDirectory | foreach-object { 

你得到了这个错误,因为Powershell假设该行的结尾是语句的结尾,然后尝试提示你输出foreach-object的缺失参数 - 在这种情况下,它的脚本块*。将左大括号移动到同一行告诉Powershell有更多的陈述。

*为什么'过程'? foreach-object cmdlet可以将三个脚本块作为参数:BeginProcessEnd。 Begin和End是可选的,但需要Process。如果提供没有名称的脚本块,则假定它是Process。