我有一个我一直在处理的脚本,它读取指定的目录,找到.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 ++
}
......这是输出:
对于我向您展示的示例,我在目录中有四个.CSV文件。我不得不手动执行我的脚本,每次它都会按预期执行,但仅限于它在目录中遇到的第一个项目。它实际上并没有循环,我在这里缺少什么?
答案 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}