如何创建Powershell脚本以将特定文件移动到其他位置?



所以我的任务是编写一个脚本,将文件从一个文件夹移动到另一个文件夹,这很容易。 我遇到的问题是这些文件是用于帐户的,因此会有一个名为 DEA05292020.pdf 的文件和另一个名为 TENSJ05292020 的文件,每个文件都需要转到一个特定的文件夹(例如,DEA05292020.pdf文件需要移动到一个名为 DEA 的文件夹,TENSJ05292020将移动到 TENSJ 文件夹。 有一百多个不同的帐户有自己的特定文件夹。 这些文件都从我们的侦察文件夹中开始,需要在每月月底移动到各自的帐户文件夹中。 所以我的问题是,我怎样才能创建一个Powershell脚本来实现这一点。 我对Powershell很陌生,一直在学习"在一个月的午餐中学习Powershell",并对它有基本的了解。 所以到目前为止我所拥有的非常简单,我可以将文件复制到新文件夹:

复制项目 -路径 "\Sageshare\share\Reconciliation\PDF Recon Center\DEA Recon 05292020" -目标 "Sageshare\share\Account Rec. Sheets\separate Accounts\DEA">

这有效,但我需要更多的自动化来分隔 PDF 侦察中心文件夹中的所有不同帐户名称。 如何制作一个脚本来过滤帐户名称(IE:DEA(以及文件名中的月份和年份(IE:052020从文件名的05292020部分中提取(?

谢谢!

如果@Lee_Dailey想编写代码并将其发布在这里,我将删除我的答案。他解决了问题,我只是用代码搞砸了。

请不要一次测试所有内容,而是分批运行它,以便您可以监控其行为而不会弄乱您的环境。它以您可能不想要的方式移动文件,即如果有一个名为 a 的文件夹,它会将匹配该文件夹的所有内容移动到其中。如果要防止这种情况,可以在实际创建文件夹本身之前编写预扫描,如果有文件夹与该名称更"匹配"。很确定它以最简单的方式理解您想要的一切。:)

$names =    $(gci -af).name |  
ForEach-Object {
if (-not ($_.Contains(".git"))){   
$_
}
}
if ( $null -eq $names ) {
Write-Host "No files to move!"
Start-Sleep 5
Exit
}
$removedNames = $names | 
ForEach-Object { 
$_ = $_.substring(0, $_.IndexOf('.')) # Remove extension
$_ -replace '[^a-zA-Z-]','' # Regex removes numbers
}
$removedNames = $removedNames | 
Get-Unique # Get unique folder names
$names | 
ForEach-Object {
$name = $_    
$removedNames | 
ForEach-Object { 
if ($name.Contains($_)) # If it matches a name
{ 
if (-not (Test-Path ".$_")) { # If it doesn't see the folder
New-Item    -Path "." `
-Name "$_" `
-ItemType "directory"
}
Move-Item   -Path ".$name" `
-Destination ".$_" # Move file to folder
}
}
}

最新更新