Пакетная выдача — создание папок и перемещение документов

Пакетная выдача — создание папок и перемещение документов

Я пытаюсь создать пакетный скрипт в Windows 7, который будет искать первые 6 цифр сотен PDF-файлов, создавать папки на основе 6 уникальных цифр и перемещать PDF-файлы в соответствующие папки. (Есть некоторые .pdf-файлы, которые имеют те же 6 уникальных цифр)

Пакет ниже почти работает для меня. Он создает папки для каждого уникального 6-значного pds, однако не перемещает все документы: Например: следующее перемещает в папку 100036 100036.pdf будет перемещен, 1000361.pdf будет перемещен. 1000361copy будет перемещен.

Если в имени файла есть пробел, он не будет перемещен в папку 100036. 100036 - 1.pdf, 100036 - copy.pdf не будут перемещены

Любые идеи, как это исправить?

Заранее спасибо:

@echo off
REM This script creates folders based on file names and moves those files into the folders.  
REM *.pdf is the search term. Change this to search for different files.   
REM md %name:~0,6% will make a directory based on the first 6 characters of the file name. Change to 5% for the first 5 characters. 
REM move %* %name:~0,6% will move the file to the directory based on the first 6 characters of the file name. Change to 5% for the first 5 characters.

for /f %%F in ('dir/b/a-d *.pdf') do call :sub1 %%F
goto :eof

:sub1
set name=%1
md %name:~0,6%
move %* %name:~0,6%

Отредактировано:

 @echo off
    for /f "tokens=*" %%F in ('dir/b/a-d *.pdf') do call :sub1 %%F
    goto :eof

    :sub1
    set name=%1
    md %name:~0,6%
    move %* %name:~0,6%

решение1

Поскольку for /fразделение осуществляется с помощью пробела, для обработки полного имени файла необходимо добавить опцию «tokens=*»:

for /f "tokens=*" %%F in ('dir/b/a-d *.pdf') do call :sub1 %%F

ОБНОВЛЯТЬ: Также необходимо заключить mv в кавычки из-за символа пробела:

move "%*" "%name:~0,6%"

Связанный контент