Problema em lote - Criação de pastas e movimentação de documentos

Problema em lote - Criação de pastas e movimentação de documentos

Estou tentando criar um script em lote no Windows 7 que analisará os primeiros 6 números de centenas de PDF, criará uma pasta com base nos 6 números exclusivos e moverá os PDFs para suas pastas respeitadas. (Existem alguns .pdfs que possuem os mesmos 6 números exclusivos)

O lote abaixo quase funciona para mim. Ele cria as pastas para cada pds de 6 números exclusivos, porém não moverá todos os documentos: Por exemplo: Os seguintes movimentos para a pasta 100036 100036.pdf serão movidos, 1000361.pdf serão movidos. 1000361cópia será movida.

Quando houver espaço no nome do arquivo, ele não será movido para a pasta 100036. 100036 - 1.pdf, 100036 - copy.pdf não será movido

Alguma idéia de como consertar isso?

Agradeço antecipadamente:

@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%

Editado:

 @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%

Responder1

Como for /fa divisão usa caracteres de espaço, para processar o nome completo do arquivo, você deve adicionar a opção "tokens=*":

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

ATUALIZAR: Também é necessário citar mv devido ao caractere de espaço:

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

informação relacionada