Как переместить документы в определенные папки / подпапки на основе 2 частей заголовка - PullRequest
0 голосов
/ 10 января 2019

Новичок здесь,

Попытка убрать головную боль при подаче.

Мне нужен скрипт bat.file для перемещения файлов на основе начала имени и определенного слова в имени. Извините, это трудно объяснить. Вот мой пример ....

195-21 Cat ate my shoe
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

195-22 Jump on the Roof
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

1104-03 Dog named Dave
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

1010-146 Water for pond
-AP DISBURSEMENTS
-BILLING
-CLIENT PW

Это все файлы .pdf, которые я хочу переместить:

195-21 December 2018 Invoice 59641
195-21 Amerson Report Class $84.61
195-22 December 2018 Invoice 57741
195-21 January 2018 Invoice 59131
1104-03 Ciox 18-Jun-16 $346.79
1104-08 St. Augustine 03-May-17 $35.21
1010-146 May 2018 Invoice 56981

Таким образом, файл будет перемещаться на основе числовой части имени.

195-21 Cat ate my shoe
-AP DISBURSEMENTS
<------195-21 Amerson Report Class $84.61
-BILLING   
<---------195-21 December 2018 Invoice 59641
-CLIENT PW

Если в имени файла есть слово Invoice, мне нужно перейти на subfile Billing. Если бы не все остальные, нужно перейти в подфайл AP DISBURSEMENTS.

Если основной файл для этого номера не существует, он может просто оставаться там, где он есть.

Проблема в том, что некоторые цифры содержат больше символов, чем другие. 195-21 против 1010-146

ТАКЖЕ у меня нет ИДЕИ, что я делаю. Как будто у меня есть этот великий план, но я даже не знаю, с чего начать ...

Любая помощь приветствуется!

Я нашел это онлайн и попробовал. Это было опрятно, но опять же я не знал, что я делаю, и это не то, что я искал.

@echo off &setlocal
for /f "delims=" %%i in ('dir /b /a-d *.pdf') do (

    set "filename1=%%~i"
    setlocal enabledelayedexpansion
    set "folder1=!filename1:~0,8!"
    mkdir "!folder1!" 2>nul
    move "!filename1!" "!folder1!" >nul
    endlocal

)

Я бы хотел, чтобы PDF-файлы были перемещены в соответствующую папку на основе первой части имени и "счета-фактуры", но этот код этого не делает. Он перемещает их в папки на основе первых нескольких чисел. Я понятия не имею, что я делаю. Извините, что потратил ваше время ...

1 Ответ

0 голосов
/ 11 января 2019
  • Сначала вы должны использовать простой для итерации файлов PDF,
  • 2-й для / f для разделения имен файлов на 1-й пробел и
  • 3-й для / f для итерации папки назначения
  • , затем проверьте, если это счет-фактура и
  • , если папка (и) назначения существуют.

Все это можно сделать без задержки и расширения.

Пример дерева перед:

> tree \ /F
│
└───Base
    │   1010-146 May 2018 Invoice 56981.pdf
    │   1104-03 Ciox 18-Jun-16 $346.79.pdf
    │   1104-08 St. Augustine 03-May-17 $35.21.pdf
    │   195-21 Amerson Report Class $84.61.pdf
    │   195-21 December 2018 Invoice 59641.pdf
    │   195-21 January 2018 Invoice 59131.pdf
    │   195-22 December 2018 Invoice 57741.pdf
    │
    ├───1010-146 Water for pond
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   └───CLIENT PW
    ├───1104-03 Dog named Dave
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   └───CLIENT PW
    ├───195-21 Cat ate my shoe
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   └───CLIENT PW
    └───195-22 Jump on the Roof
        ├───AP DISBURSEMENTS
        ├───BILLING
        └───CLIENT PW

работает с этим пакетным файлом

:: Q:\Test\2019\01\10\SO_54136438.cmd
@Echo off
set "Base=A:\Base"
Set "Ext=*.pdf"
Set "DestInv=BILLING"
Set "DestDiv=AP DISBURSEMENTS"

For %%A in ("%Base%\%Ext%") Do For /f %%B in ("%%~nA") Do (
    For /F "delims=" %%C in ('Dir /B /AD "%Base%\%%B*" 2^>Nul') Do (
        Echo:Invoice|findstr /I "%%~nA" 1>Nul 2>&1 &&(
            If Not exist "%Base%\%%C\%DestInv%\" MD "%Base%\%%C\%DestInv%\"
            Move "%%~fA" "%Base%\%%C\%DestInv%\"
        )||(
            If Not exist "%Base%\%%C\%DestDiv%\" MD "%Base%\%%C\%DestDiv%\"
            Move "%%~fA" "%Base%\%%C\%DestDiv%\"
        )
    )
)

и после:

> tree \ /F
│
└───Base
    │   1104-08 St. Augustine 03-May-17 $35.21.pdf
    │
    ├───1010-146 Water for pond
    │   ├───AP DISBURSEMENTS
    │   ├───BILLING
    │   │       1010-146 May 2018 Invoice 56981.pdf
    │   │
    │   └───CLIENT PW
    ├───1104-03 Dog named Dave
    │   ├───AP DISBURSEMENTS
    │   │       1104-03 Ciox 18-Jun-16 $346.79.pdf
    │   │
    │   ├───BILLING
    │   └───CLIENT PW
    ├───195-21 Cat ate my shoe
    │   ├───AP DISBURSEMENTS
    │   │       195-21 Amerson Report Class $84.61.pdf
    │   │
    │   ├───BILLING
    │   │       195-21 December 2018 Invoice 59641.pdf
    │   │       195-21 January 2018 Invoice 59131.pdf
    │   │
    │   └───CLIENT PW
    └───195-22 Jump on the Roof
        ├───AP DISBURSEMENTS
        ├───BILLING
        │       195-22 December 2018 Invoice 57741.pdf
        │
        └───CLIENT PW
...