Foreach循环将特定文件移动到指定的文件夹中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Foreach循环将特定文件移动到指定的文件夹中相关的知识,希望对你有一定的参考价值。
我正在学习PowerShell,我的作业很困难。我的目标是获取当前目录中所有文件的列表,将其保存到变量中。然后使用foreach循环根据文件名将每个文件移动到不同的文件夹,使用文件标签搜索文件名。
文件:
- 1LectureFile
- 1LabFile
- 1AssignmentFile
- 1.ps1
文件夹:
- 阅读
- 实验室
- 分配
- 脚本
运行脚本时,文件会进入各自的文件夹。
我必须使用文件标签(例如*lec*
,*lab*
,*Assign*
,*Scripts*
)来搜索文件。
这是我到目前为止的代码:
# Gets a list of all file names and saves it to a variable
$Files2 = Get-ChildItem "dir" -File
foreach ($i in $Files2) {
#My attempt at searching for the files containing lec
if (gci ($i -eq "*lec*")) {
#Moves the file that fits the description into Lecture folder
Move-Item $i -Destination "Lecture"
# If $i doesn't fit first if, repeats and looks for Lab
} elseif (" ") {
Move-Item " "
}
}
我不希望任何人给我答案。任何提示,或提示或一般指南指出我在正确的方向将非常感激。我在网上搜索过,但大多数建议的答案对我来说太难理解了(大多数命令我还没有学过)。
您的switch
可以简化为:
switch -Wildcard ($Files2) {
"*lec*" {Move-Item $_ -Destination "Lecture"}
"*lab*" {Move-Item $_ -Destination "Lab"}
"*assign*" {Move-Item $_ -Destination "Assignment"}
"*.ps1*" {Move-Item $_ -Destination "Scripts"}
}
switch命令将遍历文件对象数组。在开关内我们引用$_
,它表示正在测试的数组的当前项。
另一种可以做到的方法是使用哈希表来创建每种文件应该去的字典映射,然后在select语句中使用-match
,并使用自动$matches
变量来查找每个文件应该在哈希表中的位置。就像是:
$PathLookup = @{
'lec' = "Lecture"
'lab' = "Lab"
'assign' = "Assignment"
'.ps1' = "Scripts"
}
$Files2 | Where{$_.Name -match '(lec|lab|assign|.ps1)'} | ForEach{
Move-Item $_ -Destination $PathLookup[$Matches[1]]
}
感谢您提供所有有用的提示和技巧。我已经成功完成了脚本,它按预期工作。我没有使用if
语句,而是使用了Switch
语句来提高效率。因为我在循环中添加更多,forloop
正在停留,否则我会省略它。
Foreach ($i in $Files2) {
switch -Wildcard ($i) {
("*lec*") {Move-Item $i -Destination "Lecture"}
("*lab*") {Move-Item $i -Destination "Lab"}
("*assign*") {Move-Item $i -Destination "Assignment"}
("*.ps1*") {Move-Item $i -Destination "Scripts"}
}
}
以上是关于Foreach循环将特定文件移动到指定的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章
perl foreach 循环跳过特定文件夹下特定文件的迭代
如何将多个文件扩展名添加到文件:Foreach 循环容器 SSIS 中的输入字段
我想在c#中使用foreach循环一一读取具有特定json对象数组的json文件数据