在开始处理下一个文件之前,我正在努力将当前文件重命名为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'}
我很欣赏如何关闭文件的线索,以便我可以在循环中执行重命名 - 或者更好的方法。
答案 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'
}