3

Итак, я столкнулся с интересной проблемой.

Я пишу сценарий PowerShell для проверки папки "A" на наличие идентичных имен файлов, найденных в папке "B". Если они находятся в папке "A", они перемещаются в папку "C". Однако, если в папке "A" несколько файлов, их нужно переименовать, когда они будут перемещены в папку "C".

$folderA = 'S:\Folder A\' # Folder to remove cross-folder duplicates from
$folderB = 'S:\Folder B\' # Folder to keep the last remaining copies in
Get-ChildItem $folderB | ForEach-Object {
    $pathInA = $folderA + $_.Name
    If (Test-Path $pathInA) {Move-Item $pathInA -Destination 'S:\Folder C\'}
}

Который делает большую работу по поиску и перемещению, но не так сильно переименовывает. Любые рекомендации для меня?

РЕДАКТИРОВАТЬ: Извините, я должен был указать. Самый полезный способ переименования: xy.txt> xy_1.txt .... или .... xy.txt> xy(1).txt

И цель их переименования заключается в том, что у нас есть файловая структура, в которой мы создаем PDF-файл с цифровой подписью для квитанции о вручении машины, над которой нужно работать (папка A). Затем он подписывается техническим специалистом, когда работа завершается, а когда это происходит, он сохраняется в другой папке (папка B). И в конечном итоге покупатель получает ответ, который находится в совершенно другом месте (папка D). Который является другой подписью и сохранен в этой папке. Как только он попадает в папку D, все остальные копии становятся бесполезными, так как на них нет всех подписей, и они являются только остатками. Я действительно надеюсь, что это имеет смысл, и если это не так, пожалуйста, дайте мне знать.

1 ответ1

1

Вы не упомянули, как вы хотите переименовать ваши файлы или для каких целей. тем не менее, это сделает свое дело. прямо сейчас он просто добавит число к имени файла. таким образом, xy.txt будет xy1.txt в новой папке и т. д.

$i = 1
$FolderB = gci "S:\Folder B" | select -expand Name
$FolderA = gci "S:\Folder A" | ? { $_.Name -in $FolderB } | % {  
    Move-Item $_.FullName "S:\Folder C" -PassThru | 
    Rename-Item -NewName ($_.BaseName + $i + $_.Extension)
    $i++
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .