How to recursively create subfolder in each folder of a directory in CMD

Posted on

Problem :

Let’s say I have a directory called Grandparent
Inside this directory are multiple other folders, Parent 1, Parent 2, etc.. My goal is to create a new folder, Child, inside each of the Parent folders.

For example, what I have:

Grandparent/
    Parent1/
    Parent2/
    ...
    ...
    ParentX/

What I want:

Grandparent/
    Parent1/
        Child/
    Parent2/
        Child/
    ...
    ...
    ParentX/
        Child/

Is there a way to do this in CMD? (Note: I cannot download Powershell or any other convenient tool that would make my life easier, I am stuck with the default Windows Command Prompt)

Update

Following the links in the comments, I have tried the following:

for /r %%a in (.) do (
  rem enter the directory
  pushd %%a
  echo In Directory:
  mkdir testFolder
  cd
  rem leave the directory
  popd
)

However, this creates the folder testFolder in every newly created folder:

Grandparent/
    Parent1/
        Child/
            Child/
                Child/
                    ...
    Parent2/
        Child/
            Child/
                Child/
                    ...
    ...
    ...
    ParentX/
        Child/
            Child/
                Child/
                    ...
    Child/
        Child/
            Child/
                ...

Solution :

However, this creates the folder testFolder in every newly created folder

This is because the for /r command is updating the list of files to process every time you create a new directory, so is really only useful if you want to visit a fixed list of directories.

Here is a batch file (test.cmd) that will do what you want. Place it in the Grandparent directory.

test.cmd:

@echo off
setlocal
for /f "usebackq tokens=*" %%a in (`dir /b /a:d`) do (
  rem enter the directory
  pushd %%a
  echo In Directory: %%a
  md child
  rem leave the directory
  popd
  )
endlocal

Notes:

  • dir /b /a:d is evaluated once, so the list of directories is fixed
  • for /f will loop through this fixed list exactly once.

Example output:

> test
In Directory: Documentation
In Directory: subdir
In Directory: test
In Directory: test with space
In Directory: test1

> dir /b /a:d /s child
F:testDocumentationchild
F:testsubdirchild
F:testtestchild
F:testtest with spacechild
F:testtest1child

Further Reading

  • An A-Z Index of the Windows CMD command line – An excellent reference for all things Windows cmd line related.
  • dir – Display a list of files and subfolders.
  • for /f – Loop command against the results of another command.
  • md – Make Directory – Creates a new folder.
  • pushd – Change the current directory/folder and store the previous folder/path for use by the POPD command.
  • popd – Change directory back to the path/folder most recently stored by the PUSHD command.

Leave a Reply

Your email address will not be published. Required fields are marked *