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 ENABLEDELAYEDEXPANSION
is 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.!nf!
format for variables is related to delayed expansion.%nf%
.nf
to 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.MOVE
to move a file, MV
is 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With