Как скопировать файлы на основе списка в соответствующие папки, которые также создаются на основе списка? - PullRequest
0 голосов
/ 25 октября 2018

Итак, я совершенно новичок в скриптовых и пакетных файлах.

Я ищу для копирования файлов на основе списка файлов для копирования.У меня есть текстовый файл для списка файлов для копирования, и я хочу, чтобы скрипт копировал все эти файлы построчно из исходного каталога.

Например, у меня есть более 1000 файлов для копирования, и есть3 файла для каждой папки, которую я хочу создать и поместить в нее.Ниже приведен пример форматирования имен файлов:

file3_AB12_autoc.pdf
file3_AB12.jpeg
file1_AB12.png

file3_CD34_autoc.pdf
file3_CD34.jpeg
file1_CD34.png

...etc...

После того, как они скопированы, я хочу переместить их в папки, которые я создал, используя текстовый файл и команду:

FOR /F %i in (folders_list.txt) do md %i

Теперь, с помощью моего скрипта, я хочу переместить файлы, которые он копирует, в соответствующие папки.В основном, если имя файла содержит имя папки, то они должны переместиться в папку.Например:

C:\AB12                          THIS FOLDER SHOULD HAVE ALL THE FOLLOWING FILES
     file3_AB12.jpeg
     file3_AB12_autoc.pdf
     file1_AB12.png

C:\CD34                          THIS FOLDER SHOULD HAVE ALL THE FOLLOWING FILES
     file3_CD34.jpeg
     file3_CD34_autoc.pdf
     file1_CD34.png

Я посмотрел другие подобные вопросы, но, похоже, ничего не работает для того, что я хочу сделать.Я считаю, что приведенные ниже ссылки полезны, но я не знаю, как их соединить.

Как копировать файлы в папки на основе файла, содержащего имя папки?

Копирование файлов на основе списка, сохраненного в текстовом файле

1 Ответ

0 голосов
/ 25 октября 2018

В PowerShell Move-Item будет перемещать файлы.Тогда вам просто нужны регулярные выражения для определения пути и нового имени файла, например:

$txt = "file3_AB12_autoc.pdf
file3_AB12.jpeg
file1_AB12.png
file3_CD34_autoc.pdf
file3_CD34.jpeg
file1_CD34.png
badfilename.txt"

foreach ($orig_file in $txt -split '\r\n') {

    if ( $orig_file -match '^([^_]*)_([^_.]*)(.*)\.(.*)$' ) {
        $dir = $matches[2]
        $new_file = '{0}{1}.{2}' -f $matches[1], $matches[3], $matches[4]

        'Moving {0} to {1}\{2}' -f $orig_file, $dir, $new_file

        Move-Item -Path $orig_file -Destination ('{0}\{1}' -f $dir, $new_file)

    }
    else {
        '{0} not processed' -f $orig_file        
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...