Скрипт Powershell, который перемещает файлы на основе имени файла - PullRequest
0 голосов
/ 21 января 2020

Я работаю над сценарием, который перемещает файлы с USB-устройства на мой рабочий стол. Файлы должны go в отдельном порядке на основе имени файла:

Файлы:

xx_xx_122.xx
xx_xx_143.xx
xx_xx_129.xx

Папка:

xx_122
xx_143
xx_129

В настоящее время застрял здесь:

$sourceFolder = "C:\Schule"


$targetFolder = "C:\Privat"

foreach($file in $fileList)
{

    If($file.Name -match "122"){

        $folderName = $matches[0]


        if(!(Test-Path "C:\Schule\$folderName")){New-Item "C:\Privat\$folderName" -type directory} 

        Move-Item "C:\Schule\$file" "C:\Privat\$folderName"                  
    }

}

1 Ответ

0 голосов
/ 21 января 2020

Вы можете сделать это с помощью регулярных выражений.

Я думаю, что-то вроде этого - то, что вы хотите:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...