Batch Issue - Criando pastas e movendo documentos

1

Estou tentando criar um script em lote no Windows 7 que analise os primeiros 6 números de 100s do pdf, crie uma pasta com base nos 6 números exclusivos e mova os arquivos PDF para suas pastas respeitadas. (Existem alguns .pdfs que possuem os mesmos 6 números únicos)

O lote abaixo quase funciona para mim. Ele cria as pastas para cada número único de 6 pds, mas não moverá todos os documentos: Por exemplo: Os movimentos a seguir para a pasta 100036 100036.pdf irá se mover, 1000361.pdf irá se mover. 1000361copy irá se mover.

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

Alguma idéia de como corrigir 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%
    
por David 28.07.2014 / 21:29

1 resposta

2

Como for /f foi dividido usando o caractere 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

ATUALIZAÇÃO: Também é necessário citar mv devido ao caractere de espaço:

move "%*" "%name:~0,6%"
    
por 28.07.2014 / 23:56