Problème de lot - Création de dossiers et déplacement de documents


1

J'essaie de créer un script batch dans Windows 7 qui examine les 6 premiers nombres de centaines de fichiers PDF, crée un dossier basé sur les 6 numéros uniques et déplace les pdfs dans leurs dossiers respectés. (Certains fichiers .pdfs ont les mêmes 6 numéros uniques)

Le lot ci-dessous fonctionne presque pour moi. Il crée les dossiers pour chaque numéro unique composé de 6 numéros, mais ne déplacera pas tous les documents: Par exemple: Les déplacements suivants dans le dossier 100036 100036.pdf seront déplacés, 1000361.pdf sera déplacés. 1000361copy se déplacera.

Lorsqu'il y a un espace dans le nom du fichier, il ne sera pas déplacé dans le dossier 100036. 100036 - 1.pdf, 100036 - copy.pdf ne bougera pas

Une idée de comment réparer ça?

Merci d'avance:

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

Édité:

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

Réponses:


2

Parce que for /fdivisé en utilisant un caractère d'espacement, afin de traiter le nom de fichier complet, vous devez ajouter l'option "tokens = *":

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

UPDATE: Il est également nécessaire de citer mv en raison du caractère espace:

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

Merci pour votre réponse. Je suis un débutant lorsque je viens à ces scripts batch et j'apprécie l'aide. J'ai essayé d'ajouter la ligne de code que vous avez fournie (voir le code modifié ci-dessus), mais elle ne déplace toujours pas les fichiers avec un espace dans le nom du fichier. Des recommandations?
David

Étrange, ça marche quand je le teste. Afin de comprendre le problème, vous devriez en ajouter echo ==%*==dans la méthode: sub1.
Mpromonet

Merci pour la réponse. J'ai trouvé une solution. J'ai trouvé du code qui supprime les espaces pour tous les fichiers et les remplace par un _. Ensuite, ce que j'ai ci-dessus fonctionne et tout se déplace là où il le devrait.
David
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.