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