Powershell:ForEach只循环一次?

时间:2014-04-25 18:13:26

标签: loops powershell foreach

我有一个我一直在处理的脚本,它读取指定的目录,找到.CSV文件,并为每个.CSV文件执行一些逻辑,并最终将它们重命名为.csv.archived。

昨晚代码工作正常,但今天早上,当我执行代码时,它只循环一次。例如,昨晚,我在目录中有5个.csv文件,它会在一个动作中返回所有5个文件的文件名。现在,每次执行我的脚本时,它都会抓取第一个文件,执行预期的操作,然后退出,强制我手动启动每个文件的脚本。

我为了测试目的而毁掉了不相关的代码,如果有人能告诉我我做错了什么,并且我并不疯狂,我会很高兴。

以下是代码:

$iterations = 1

#set the location where the .CSV files will be pulled from
$Filecsv = get-childitem "\\SERVERPATH\Audit Test\" -recurse | where {$_.extension -eq ".csv"} | % {
$filename = $_.Name
}

#for each file found in the directory
ForEach ($Item in $Filecsv) {

 #spit out the file name
 "File Name: " + $filename

 #count the times we've looped through
 "Iterations : " + $iterations


# get the date and time from the system
$datetime = get-date -f MMddyy-hhmmtt
# rename the file 
rename-item -path ("\\SERVERPATH\Audit Test\"+ $filename) -newname ($filename + $datetime + ".csv.archived")
$iterations ++

}

......这是输出:

This is the output

对于我向您展示的示例,我在目录中有四个.CSV文件。我不得不手动执行我的脚本,每次它都会按预期执行,但仅限于它在目录中遇到的第一个项目。它实际上并没有循环,我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

就在这里(折叠在管道上以便于阅读):

$Filecsv = get-childitem "\\SERVERPATH\Audit Test\" -recurse |
 where {$_.extension -eq ".csv"} |
 % {$filename = $_.Name}

您循环浏览文件并将每个设置$ filename设置为该文件的名称,而不是让文件名在$ Filecsv中累积

$Filecsv = get-childitem "\\SERVERPATH\Audit Test\" -recurse |
where {$_.extension -eq ".csv"} |
% {$_.Name}