我有一个脚本,可以在导入.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
}
}
答案 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)
我认为同步是指顺序地进行,就像“一个接一个”一样,这就是您的脚本现在正在做的事情。
如果您要异步或彼此独立地说“并行”,则可以使用
Start-Job
,wait-job
和
receive-job
。最容易使用,但效率却不高。在某些cmdlet中,它还可以作为-AsJob
开关使用。Runspaces
。 [最有效,但很难编写代码] Workflows
[平衡,但有局限性]