Вы можете сделать это с помощью регулярных выражений.
Я думаю, что-то вроде этого - то, что вы хотите:
$sourceFolder = "C:\Temp\powershell\files"
$targetFolder = "C:\Temp\powershell\folder"
$files = Get-ChildItem $sourceFolder
foreach($file in $files){
if($file.name -match "(_)(?!.*\1)(.*)\."){
$newFolderName = $matches[2]
$newFolderPath = "$targetFolder\$newFolderName"
if(!(Test-Path $newFolderPath)){
New-Item $newFolderPath -type directory
}
Move-Item "$sourceFolder\$file" $newFolderPath
}
}
Ввод:
C:\Temp\powershell\files
|-def_122.txt
|-abc_132.txt
Вывод:
C:\Temp\powershell\folder
|-122
|-def_122.txt
|-132
|-abc_132.txt