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.