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循环将特定文件移动到指定的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章

C#获取如何获取指定文件夹下文件的个数??、

perl foreach 循环跳过特定文件夹下特定文件的迭代

如何将多个文件扩展名添加到文件:Foreach 循环容器 SSIS 中的输入字段

我想在c#中使用foreach循环一一读取具有特定json对象数组的json文件数据

$Files 中的 PowerShell ForEach $file

在 SSIS 中,如何在 Foreach NodeList 枚举器中使用 XPATH 循环遍历特定元素内的 XML