Le déplacement d'un grand nombre de fichiers dans un répertoire à plusieurs répertoires

StackOverflow https://stackoverflow.com/questions/2541887

  •  23-09-2019
  •  | 
  •  

Question

Je cherche à créer un script batch Windows pour déplacer environ 2000 fichiers et de les partager de façon à ce qu'il ya 10 fichiers par dossier. J'ai essayé de créer un script batch mais la syntaxe rechigne vraiment mon esprit. Voici ce que j'ai jusqu'à présent

@echo off

:: Config parameters
set /a groupsize = 10
:: initial counter, everytime counter is 1, we create new folder
set /a n = 1
:: folder counter
set /a nf = 1

for %%f in (*.txt) do (
:: if counter is 1, create new folder
if %n% == 1 (
    md folder%nf%
    set /a n += 1
)

:: move file into folder
mv -Y %%f folder%nf%\%%f

:: reset counter if larger than group size
if %n% == %groupsize% (
    set /a n = 1
) else (
    set /a n += 1
)
)
pause

En fait ce que ce script est une boucle à travers chaque fichier txt dans le répertoire. Il crée un nouveau répertoire au début et déplace 10 fichiers dans ce répertoire, puis crée à nouveau un nouveau dossier et déplace un autre 10 fichiers dans ce répertoire, et ainsi de suite. Cependant, je vais avoir des problèmes lorsque la variable n n'est pas incrémentée dans la boucle? Je suis sûr qu'il ya d'autres erreurs aussi depuis la fenêtre CMD ferme sur moi même avec pause. Toute aide ou des conseils est appréciée, merci pour votre temps!

Était-ce utile?

La solution

Quelques choses que vous devez savoir:

  • SETLOCAL ENABLEDELAYEDEXPANSION est nécessaire, puisque vous modifiez les variables et en utilisant leurs valeurs modifiées dans un seul bloc parenthésée. SET /? sur la ligne de commande donnera quelques informations. Une recherche sur Internet pour ce terme et vous trouverez une meilleure explication.
  • Les endroits que j'utilise le format de !nf! pour les variables est liée à l'expansion retardée.
  • Comme mentionné ghostdog74, vous n'incrémentez %nf%.
  • J'initialisés nf à 0 au lieu de 1. De cette façon, le numéro de dossier que vous souhaitez déplacer les fichiers vers est le même que le numéro de dossier que vous venez de créer. Dans votre code, vous créez FolderX, puis incrémente X, et ensuite essayer de déplacer le fichier X + 1.
  • Vous devez utiliser MOVE pour déplacer un fichier, MV est pas valide.

Ce fichier batch fonctionne ... mais assurez-vous de tester! Je ne testé sur une petite quantité de fichiers.

@ECHO OFF

SETLOCAL ENABLEDELAYEDEXPANSION

:: Config parameters
SET groupsize=10
:: initial counter, everytime counter is 1, we create new folder
SET n=1
:: folder counter
SET nf=0

FOR %%f IN (*.txt) DO (
  :: if counter is 1, create new folder
  IF !n!==1 (
    SET /A nf+=1
    MD folder!nf!
  )

  :: move file into folder
  MOVE /Y "%%f" folder!nf!

  :: reset counter if larger than group size
  IF !n!==!groupsize! (
    SET n=1
  ) ELSE (
    SET /A n+=1
  )
)

ENDLOCAL

PAUSE

Autres conseils

vous n'êtes pas incrémentez %nf%.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top