Powershell同步重命名目录中的文件

时间:2019-09-16 21:21:42

标签: powershell

我有一个脚本,可以在导入.CSV之后从字段/列重命名目录中的所有文件。我的问题是PS正在异步而不是同步地重命名文件。有没有更好的方法来获得我想要的结果?

当前文件名= 123456789.pdf

新文件名= $ documentID_ $ fileID

我需要重新命名文件才能使脚本可行。

这是我的代码(这是我的新手):

$csvPath = "C:\Users\dougadmin28\Desktop\Node Modify File Name App\test.csv"

$filePath = "C:\Users\dougadmin28\Desktop\Node Modify File Name App\pdfs"

$csv = Import-Csv $csvPath Select-Object -Skip 0 

$files = Get-ChildItem $filePath

    foreach ($item in $csv) {
        foreach($file in $files) {
            Rename-Item $file.fullname -NewName "$($item.DocumentID +"_"+ ($item.FileID)+($file.extension))" -Verbose
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以尝试使用工作流,这将允许您并行执行任务: https://docs.microsoft.com/en-us/powershell/module/psworkflow/about/about_foreach-parallel?view=powershell-5.1

请记住,PowerShell工作流有一些限制: https://devblogs.microsoft.com/scripting/powershell-workflows-restrictions/

希望有帮助!

答案 1 :(得分:0)

我认为同步是指顺序地进行,就像“一个接一个”一样,这就是您的脚本现在正在做的事情。

如果您要异步或彼此独立地说“并行”,则可以使用

  1. 后台作业。它们包括Start-Jobwait-jobreceive-job。最容易使用,但效率却不高。在某些cmdlet中,它还可以作为-AsJob开关使用。
  2. PowerShell Runspaces。 [最有效,但很难编写代码]
  3. PowerShell Workflows [平衡,但有局限性]