I need a command that can be run from the command line to create a folder for each file (based on the file-name) in a directory and then move the file into the newly created folders.
Example :
Starting Folder:
Dog.jpg
Cat.jpgThe following command works great at creating a folder for each filename in the current working directory.
for %i in (*) do md "%~ni"Result Folder:
\Dog\
\Cat\
Dog.jpg
Cat.jpgI need to take this one step further and move the file into the folder.
What I want to achieve is:
\Dog\Dog.jpg
\Cat\Cat.jpgCan someone help me with one command to do all of this?
03 Answers
The second command would be
for %i in (*) do move "%i" "%~ni"EDIT: Added "" for the %i, based on and31415's comment. tnx.
3Just execute these commands in series:
For creating the folders for each file:
for %i in (*) do mkdir "%~ni"For moving each file to its folder:
for %i in (*) do move "%i" "%~ni" 2 This will do it if you have some folders like: example years\Filename.mp4
1901\Filename.mp4
1902\Filename.mp4
1903\Filename.mp4it will list all the folder 1st level files; lists all *.mp4 and *.mkv will create the 2 level folders with the filename and will move all the same name files in the 1st level folder to the 2nd level folder, run it at the years base folder.
for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"If you don't have a 1st level YEARS folder you can just bypass the first for and run the 2nd step, run it at the filename base folder.
for %i in (*.mp4,*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"The && will ensure that the previous mkdir %ERRORLEVEL% is 0 to run the move of the files
To test, use this:
for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do echo "%~dpi%~ni" && echo "%~dpi%~ni.*" "%~dpi%~ni\" 2