Powershell关闭文件重命名为foreach循环的最后一步

时间:2014-01-07 12:42:15

标签: powershell foreach

在开始处理下一个文件之前,我正在努力将当前文件重命名为foreach循环的最后一步(它依次处理目录中的所有.csv文件)。

$rootpath = "C:\Somewhere\Working\"
$List = get-childitem $rootpath | where {$_.extension -eq ".csv"}
foreach($file in $List){
  foreach($Computer in (Import-CSV $rootpath\$file -Header Assett,Group,Location))
    {
    New-ADComputer -Name $Computer.Assett
    }
  Rename-Item $rootpath\$_ -NewName ($rootpath + "\" + $_.BaseName + '.bak')

                       }

返回错误:

Rename-Item : Cannot rename the item at 'C:\Somewhere\Working\' because it is in use.

使用以下内容完成foreach循环完成后,只需重命名所有csv文件,按预期工作,但是可能会在脚本启动后创建另一个输入文件,并在不进行处理的情况下重命名。

get-childitem -path $rootpath | where {$_.extension -eq ".csv"} | Rename-Item -NewName {$_.BaseName + '.bak'}

我很欣赏如何关闭文件的线索,以便我可以在循环中执行重命名 - 或者更好的方法。

1 个答案:

答案 0 :(得分:1)

试试这个:

$rootpath = "C:\Somewhere\Working\"

# Get all csv files (filter is quicker than filtering all files using where)
get-childitem $rootpath -filter "*.csv" | % {

  # import the csv (closes the file)
  $csv = Import-CSV -Path $_ -Header Assett,Group,Location

  # loop around file contents
  foreach($Computer in $csv)
  {
    New-ADComputer -Name $Computer.Assett
  }

  # rename the file
  Rename-Item $_ -NewName $_.BaseName + '.bak'

}