2016-02-22 3 views
-1

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

У меня есть папка с 1000 PDF-файлами. Каждый PDF является формой членства в спортзале с именем члена тренажерного зала и датой начала в имени файла. Мне нужно перенести эти PDF-файлы в основную папку, в которой уже есть подпапки. Эти подпапки соответствуют имени членов тренажерного зала, но они не содержат дат. Однако они содержат специальный код, заключенный в круглые скобки.

Пример: В моей папке GymForms содержится 1000 PDF-файлов. (Источник папки) C: \ Users \ BlackPC \ Desktop \ GymForms

Алан Гивенса - H-9 1-16-2016.pdf

Jane Doe - H-9 7-10-2015.pdf

Джон Генри - H-9 1-16-2016.pdf

William Falls - H-9 7-10-2015.pdf

My Master Folder (Папка назначения) содержит вложенные папки со всеми именами участников гимнастики. C: \ Users \ BlackPC \ Desktop \ ActiveMembers

Алан Гивенс (33U)

Jane Doe (05R)

Джон Генри (05S)

William Falls

Так пакетный файл ниже - это то, что у меня есть (которое было изменено из сообщения другого пользователя) ... и оно будет работать, если папка-член (папка-получатель) не содержит скобок. Другими словами, когда партия выполняется, файлы PDF для Алана Гивенса, Джейн Доу и Джона Генри не будут перемещаться/сортироваться в соответствующие папки. Но PDF-файл для члена «William Falls» будет сортироваться в правильной папке без каких-либо проблем.

Так что я надеюсь, что кто-то может помочь мне исправить это и заставить его делать то, что я хочу? В сущности мне нужно, чтобы этот пакетный файл был изменен, поэтому PDF-файл все еще может сортироваться, когда папка назначения содержит скобки в имени. Или пакетный файл изменен, чтобы сортировать файлы PDF в папках назначения на основе первых 9 символов имени папок?

Заранее благодарен!

-batch Файл-

@echo off 

setlocal enableextensions disabledelayedexpansion 

pushd "C:\Users\HPC6250\Desktop\GymForms" 

for /d %%I in (C:\Users\HPC6250\Desktop\ActiveMembers\*) do (

for %%F in (*) do (

    for /f %%A in ('echo %%~nF ^| find /i "%%~nI"') do (

     set /p a="Moving %%F to %%I... "<NUL 

     move "%%F" "%%I" >NUL 

     echo Done. 

    ) 

) 

) 

popd 

ответ

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir\t w o" 
SET "destdir=U:\destdir" 
FOR /f "delims=" %%I IN (
    'dir /b /ad "%destdir%\*" ' 
) DO (
FOR /f "tokens=1delims=(" %%s IN ("%%~I") DO (
    IF EXIST "%sourcedir%\%%s*" ECHO(MOVE "%sourcedir%\%%s*" "%destdir%\%%I\" 
) 
) 

GOTO :EOF 

Вам потребуется изменить настройки sourcedir и destdir в соответствии с вашими обстоятельствами.

Необходимые команды MOVE всего лишь ECHO ed для целей тестирования. После того, как вы подтвердили правильность команд, измените значение ECHO(MOVE на MOVE, чтобы фактически переместить файлы. Добавить >nul для подавления сообщений отчета (например.1 file moved)

Читайте список каталогов подкаталогов назначения в %%I

tokenise %%I с использованием ( в качестве разделителя, первой части (до, но не включая разделитель) для %%s

Если есть файлы в источнике по имени %%s* переместите их в пункт назначения + полное название найденной директории

Интересно, как вы намереваетесь иметь дело с двумя «Джоном Смитом».

+0

Мои шляпы от вас, мой друг. Ваше кодирование .bat работало как шарм и делало именно то, что мне было нужно. Благодарим вас за быстрое опубликование решения. Я действительно ценю это, потому что вы избавили меня от головной боли! – Joe21

Смежные вопросы