Correction/aide Batch de tri de fichier

Résolu
LapinCretin12 Messages postés 2 Date d'inscription jeudi 25 juillet 2024 Statut Membre Dernière intervention 29 juillet 2024 - 25 juil. 2024 à 21:18
LapinCretin12 Messages postés 2 Date d'inscription jeudi 25 juillet 2024 Statut Membre Dernière intervention 29 juillet 2024 - 29 juil. 2024 à 15:45

Bonjour,

J'aimerais avoir un coup de main svp. Je souhaite ranger des milliers de fichiers qui sont tous dans un dossier avec un batch. Je souhaiterais que le batch créer un dossier avec le nom du fichier jusqu'à la première lettre si il n'existe pas il le créer et y colle le fichier si il existe il y colle le fichier testé.

exemple:
qwe004.jpg --> le copie dans un dossier "qwe"

qwe002.mp4 -> le copie dans le dossier "qwe"

abc7743.jpg -> le copie dans le dossier "abc"

abc.bat > le copie dans le dossier "abc"

J'ai fais 2 bat, 2 qui fais le travail décris mais sur les 3 premières lettre du nom du fichier. Et un autre bat qui extrait dans le nom du fichier jusqu'au premier chiffre. Ces 2 script fonctionnent, je vous les met ici:

@echo off
setlocal enabledelayedexpansion

set "dossier_source=U:\Desktop\dossiertest"

cd "%dossier_source%"

for %%F in (*) do (
    set "fichier=%%~nxF"
    set "premieres_lettres=!fichier:~0,3!"
    
    if not exist "!premieres_lettres!" (
        mkdir "!premieres_lettres!"
    )
    
    move "%%F" "!premieres_lettres!\!fichier!"
)

echo Terminé !
pause
@echo off
setlocal enabledelayedexpansion


set "filename=aa_a345.txt"


set "foldername="


for /l %%i in (0, 1, 100) do (
    rem Get the current character
    set "char=!filename:~%%i,1!"
   

    if "!char!" equ "" goto :endloop
    if "!char!" geq "0" if "!char!" leq "9" goto :endloop
   

    set "foldername=!foldername!!char!"
)

:endloop


echo Folder name: !foldername!

pause

J'ai essayer de les fusionner pour faire précisément ce que je souhaite dans ce script, mais dés la seconde boucle for il dis qu'il y a une erreur de syntaxe alors que je ne comprend pas pourquoi.

@echo off
setlocal enabledelayedexpansion

set "dossier_source=U:\Desktop\dossiertest"

cd "%dossier_source%"

rem boucle qui parcours les fichiers dans le "dossier_source"
for %%F in (*) do (
    set "fichier=%%~nxF"
	set "foldername="

	rem boucle qui parcours les caractères du fichier testé actuellement(ca bug dés ici)
	for /l %%i in (0, 1, 100) do (
    		set "char=!fichier:~%%i,1!"
		if "!char!" equ "" goto :endloop
		if "!char!" geq "0" if "!char!" leq "9" goto :endloop
		
		set "foldername=!foldername!!char!"
	)
	:endloop
	
    if not exist "!foldername!" (
        mkdir "!foldername!"
    )
    
    move "%%F" "!foldername!\!fichier!"
)

echo Terminé !
pause

quelqu'un aurait une idée plz? j'ai tenté de debuggé avec des echo et des pause et je ne sais pas pourquoi dés le second for ca bug. Merci de m'avoir lu :p
Windows / Chrome 125.0.0.0

A voir également:

2 réponses

barnabe0057 Messages postés 14452 Date d'inscription lundi 2 mars 2009 Statut Contributeur Dernière intervention 3 août 2024 4 915
Modifié le 25 juil. 2024 à 21:52

Bonjour,

Je n'ai pas essayé mais comme ceci ça devrait le faire :

@echo off
setlocal enabledelayedexpansion

set "dossier_source=U:\Desktop\dossiertest"
cd "%dossier_source%"

rem boucle qui parcours les fichiers dans le "dossier_source"
for %%G in (*.*) do ( 
	for /f "tokens=1 delims=0123456789" %%A in ("%%~nG") do (
		if not exist "%%~A" (mkdir "%%~A") 
		move "%%~fG" "%%~A\%%~nxG"
	) 
)
 
echo Terminé
pause

1
LapinCretin12 Messages postés 2 Date d'inscription jeudi 25 juillet 2024 Statut Membre Dernière intervention 29 juillet 2024
29 juil. 2024 à 15:45

Merci pour ta réponse.

Je viens de tester et ca fonctionne tip top. Je t'en remercie grandement.

Tu saurais me dire pourquoi mon script fusionné ne fonctionnait pas? mauvais raisonnement de ma part?

milles merci encore

0