使用变量的文件名并使用Powershell移动类似文件

时间:2019-07-01 17:55:58

标签: powershell

我正在尝试编写一个Powershell脚本,该脚本将查看目录(c:\ Temp)并查找扩展名为.fin的文件。 如果它找到带有fin扩展名的文件,则需要将其与该fin文件的前七个字符相同的所有文件移动到另一个目录(c:\ Temp \ fin)。 该目录中一次可能有多个.fin文件,其中有需要移动的文件。 我尝试了一些不同的尝试,但是对于这样的事物我还是陌生的。我只使用了非常基本的Powershell脚本或命令。虽然这可能是基本的(不确定),但我不知道从哪里开始。

1 个答案:

答案 0 :(得分:0)

您需要两次调用Get-ChildItem。第一次获取要与文件名匹配的模式,第二次获取与文件匹配的模式。然后,您可以将第二个命令的结果传递给Move-Item。这是如何执行此操作的示例:

[CmdletBinding()]
param(
    $DirectoryToScan,
    $ExtensionToMatch = ".fin",
    $TargetDirectory
)

$Files = Get-ChildItem -Path $DirectoryToScan -File

foreach ($File in $Files) {
    if($File.Extension -eq $ExtensionToMatch) {
        $PatternToMatch = "$($File.BaseName.Substring(0, 7))*$ExtensionToMatch"
        Write-Verbose "PatternToMatch: $PatternToMatch"
        $MatchedFiles = Get-ChildItem -Path $DirectoryToScan -Filter $PatternToMatch
    }

    $MatchedFiles | Move-Item -Destination $TargetDirectory
}

如果将以上内容保存到名为Move-MatchingFiles.ps1的文件中,则可以传入参数Moving-MatchingFiles.ps1 -DirectoryToScan C:\Temp -TargetDirectory C:\Temp\fin。 ExtensionToMatch参数是可选的,只有在您要移动其他类型的文件时才需要。