Ok so here’s a nifty little batch script that will loop through all the directories in a directory to gather all the subsequent files into a new directory. (Code at bottom of the page)
(For those of you that don’t know what a batch script is here’s a quick definition. A batch file is a text file that contains a sequence of commands for a computer operating system. It’s called a batch file because it batches (bundles or packages) into a single file a set of commands that would otherwise have to be presented to the system interactively from a keyboard one at a time.)
Here’s a diagram explaining how the batch script provided at the bottom of the page works. (Note that the folders aren’t copied just the files.)
So why would you use this?
Lets say you’re dealing with a system that has outputted thousands of folders into a single folder and each folder contains files.
You could be looking at millions of files to be gathered, a process that cannot be done manually.
Or a simpler use case might be you’ve downloaded thousands of movies and each was put into a separate folder. Now you just want the media files in one location.
How to use:
Open the program notepad.
Copy the code below and past it into notepad saving the file with the extension .bat
Place the batch file in the parent folder, i.e. the folder all the other folders are in.
Double click the batch file.
The batch file will create a folder one directory level above where the parent folder is located and copy all the files to this location.
An example of how to use the file is as follows:
If you had the parent folder “My Movies” on your desktop.
Pasting the batch file into this folder, and double clicking on it, would copy every movie into a folder called “Copied from My Movies” on your desktop.
And here’s the code,
Adiós.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@ECHO OFF | |
TITLE WAIT ! | |
:: ASSIGN THE FILE PATH OF BATCH FILE TO A VARIABLE | |
SET "sourceDir=%CD%" | |
:: GET THE NAME OF THE FOLDER WHICH THE BATCH FILE IS IN | |
FOR %%a IN (.) DO SET currentFolder=%%~na | |
:: GO UP ONE DIRECTORY | |
CD .. | |
:: MAKE A DYNAMIC FOLDER NAME | |
::SET folderName=Copied From %currentFolder% | |
SET "folderName=Copied from %currentFolder%" | |
:: CREATE A FOLDER TO PUT THE COPIED FILES IN | |
:: IF FOLDER ALREADY EXISTS DELETE IT | |
IF EXIST "%folderName%" RMDIR "%folderName%" /S /Q | |
MKDIR "%folderName%" | |
:: ASSIGN DESTINATION FOLDER TO A VARIABLE | |
SET "destinationFolder=%CD%\%folderName%" | |
:: CREATE A LOG FILE IN DESTINATION FOLDER | |
SET "_report=%destinationFolder%\logxcopy.txt" | |
:: CREATE ERROR MESSAGE | |
IF NOT EXIST "%sourceDir%" (ECHO.Could not find %sourceDir% &GoTo:DONE) | |
:: OVERWRITE PREVIOUS LOG | |
>"%_report%" ( | |
echo.%date% – %time% | |
echo.————————————————— | |
echo. | |
) | |
:: COPY FILES | |
FOR /F "Delims=" %%! IN ('DIR "%sourceDir%\" /b /s /a-d 2^>NUL') DO ( | |
@ECHO.%%! &( | |
@XCOPY "%%!" "%destinationFolder%\" /i /y /h /f /c >>"%_report%",2>&1) | |
) | |
:DONE | |
TITLE,Done……. | |
ECHO.&PAUSE>NUL |