Problema por lotes: creación de carpetas y movimiento de documentos

Problema por lotes: creación de carpetas y movimiento de documentos

Estoy intentando crear un script por lotes en Windows 7 que examinará los primeros 6 números de cientos de pdf, creará una carpeta basada en los 6 números únicos y moverá los archivos PDF a sus carpetas respetadas. (Hay algunos archivos .pdf que tienen los mismos 6 números únicos)

El siguiente lote casi funciona para mí. Crea las carpetas para cada pds único de 6 números, sin embargo, no moverá todos los documentos: por ejemplo: lo siguiente se mueve a la carpeta 100036, se moverá 100036.pdf y se moverá 1000361.pdf. 1000361copia se moverá.

Cuando hay un espacio en el nombre del archivo, no se moverá a la carpeta 100036. 100036 - 1.pdf, 100036 - copy.pdf no se moverá

¿Alguna idea de cómo solucionar este problema?

Gracias de antemano:

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

Respuesta1

Debido a que for /fla división utiliza el carácter de espacio, para procesar el nombre completo del archivo, debe agregar la opción "tokens=*":

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

ACTUALIZAR: También es necesario citar mv debido al carácter de espacio:

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

información relacionada