Moving a large number of files in one directory to multiple directories
I am looking to create a Windows batch script to move about 2,000 files and splitting them up so that there are 10 files per folder. I have attempted creating a batch script but the syntax really boggles my mind. Here is what I have so far
@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
Basically what this script does is loop through each .txt file in the directory. It creates a new directory in the beginning and moves 10 files into that directory, then creates a new folder again and moves another 10 files into that directory, and so on. However, I'm having problems where the
n variable is not being incremented in the loop? I'm sure there's other errors too since the CMD window closes on me even with
pause. Any help or guidance is appreciated, thanks for your time!
A few things you need to know:
SETLOCAL ENABLEDELAYEDEXPANSIONis needed, since you are changing variables and using their changed values in a single parenthesized block.
SET /?on the command line will give some info. Search the internet for this term and you will find a better explanation.
- The places I use the
!nf!format for variables is related to delayed expansion.
- As ghostdog74 mentioned, you weren't incrementing
- I initialized
nfto 0 instead of 1. This way, the folder number you want to move files to is the same as the folder number you just created. In your code, you create folderX, then increment X, and then try to move the file to X+1.
- You have to use
MOVEto move a file,
MVis not valid.
This batch file works...but make sure you test! I only tested on a small amount of files.
@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