Я хочу отсортировать около 3000 файлов PDF в свои собственные папки. Все 3000 файлов находятся в одной папке и имеют одинаковый формат.

COURSE NAME - EMPLOYEEFIRSTNAME EMPLOYEELASTNAME

Я сделал все папки, но теперь хочу переместить соответствующий документ PDF в соответствующую папку. Для начала я нашел этот удобный ответ: как сортировать файлы по папкам в соответствии с именами файлов - Windows CMD.

Это то, что я сейчас пытаюсь изменить:

:: C:\Users\User\Desktop\Training Test.cmd
@Echo off 
PushD "C:\Users\User\Desktop\Training Test"

For %%A in (*.pdf) do For /F "tokens=2,3delims=-." %%B in ("%%A") Do (
  If Not exist "%%B" MD "%%B"
  Move "%%A" "%%B"
)
PopD

Я обнаружил, что он создает новую папку с пробелом перед именем сотрудника. У меня есть папка с именем « EMPLOYEEFIRST EMPLOYEELAST », но она создает новую папку « EMPLOYEEFIRST EMPLOYEELAST » (обратите внимание на пробел в начале).

Я также заметил, что он создает новую папку для тех сотрудников с дефисом имени или фамилии. EMPLOYEE-FIRST EMPLOYEE-LAST просто превращается в новую папку « EMPLOYEE ».

Я очень новичок во всем этом. Есть ли способ решения проблем с пробелом в имени папки и переносе имен?

1 ответ1

0

Похоже , ваш разделитель между названием курса и первым / последним именем является последовательность пространства - пространство.

К сожалению, for /f нельзя рассматривать это как один разделитель, но он будет рассматривать их как один разделитель, а еще хуже, если рассматривать смежные разделители как один.

Вы можете использовать замену строки для замены - одним символом, например : а затем разделить на это.

Подстановка строки требует нормальных (не для мета) переменных, а внутри блока кода требуется отложенное расширение.

Пример дерева на моей оперативной памяти a:\ before:

> tree a:\ /F
A:\
    COURSE NAME - EMPLOYEE-FIRST EMPLOYEE-LAST.pdf
    COURSE NAME - EMPLOYEEFIRSTNAME EMPLOYEELASTNAME.pdf
    NAME COURSE - EMPLOYEE-FIRST EMPLOYEE-LAST.pdf
    NAME COURSE - EMPLOYEEFIRSTNAME EMPLOYEELASTNAME.pdf

запустив этот командный файл:

:: Q:\Test\2019\03\01\SU_1410384.cmd
@Echo off & SetLocal EnableDelayedExpansion
PushD "C:\Users\User\Desktop\Training Test"
For /f "delims=" %%A in ('dir /B "* - *.pdf" 2^>Nul') do (
    Set "BaseName=%%~nA"
    Set "BaseName=!BaseName: - =:!"
    For /F "tokens=1,2 delims=:" %%B in ("!BaseName!") Do (
        If Not exist "%%B" MD "%%B"
        Move "%%A" "%%B" 1>Nul
    )
)
PopD

И дерево после:

> tree a:\ /F
A:\
├───COURSE NAME
│       COURSE NAME - EMPLOYEE-FIRST EMPLOYEE-LAST.pdf
│       COURSE NAME - EMPLOYEEFIRSTNAME EMPLOYEELASTNAME.pdf
│
└───NAME COURSE
        NAME COURSE - EMPLOYEE-FIRST EMPLOYEE-LAST.pdf
        NAME COURSE - EMPLOYEEFIRSTNAME EMPLOYEELASTNAME.pdf

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