List Files in a Subdirectory and get Relative Paths only with Windows Command Line

Using Windows command line to List files with subdirectory

I want to output: .\folder1\1.jpg,.\foler1\2.jpg....

I know if we use dir /s/b *.jpg > list.txt that will get something like C:\download\folder\folder1\1.jpg, I don't want to that, I just need .\folder1\1.jpg

Variable Clarification (below)

  • Where the logic below is FOR %X IN ("folder1","Folder2") or SET Folders=("Folder1","Folder2","Folder3","Folder4")you will put your "Folder1","Folder2", and so on just like that with the double quotes and commas for each folder name you want to look for and list the ./Foldername/file.jpg to the file you are appending the echo'd output.
  • For the Command Line Copy Example, you will want to do a CD /D C:\Path to the parent directory where the subfolders where the .JPG files exist as that logic is implicit assuming you're in the parent directory to find those child subfolders and the filetypes/extensions they contain.
  • For the other examples, you will just plug in the parent directory that contains all the child subfolders where the .JPG files exist in the SET ParentDir= value and everything should work otherwise as expected.
  • The other variables that are SET should be self explanatory I assume as those are named pretty close to what they mean but let me know if you need further clarification otherwise.

Command Line Copy Example

FOR %X IN ("folder1","Folder2") DO FOR /F "TOKENS=*" %F IN ('DIR /B /A-D ".\%~X\*.jpg"') DO ECHO .\%~X\%~F>>C:\Path\Log.txt

Set Variables Command Line Copy Example

(Use the below to set your folder names and file extensions for the DIR command. Also plug in the parent directory full path where the subfolders you want to append in that format to the text file is located.)

SET FileType=*.jpg
SET ParentDir=C:\Users\Name\Desktop
SET Folders=("Folder1","Folder2","Folder3","Folder4")
SET LogFile=C:\Path\LogFile.txt

CD /D "%ParentDir%"
FOR %X IN %Folders% DO FOR /F "TOKENS=*" %F IN ('DIR /B /A-D ".\%~X\%FileType%"') DO ECHO .\%~X\%~F>>"%LogFile%"

Batch Script Example with Setting Variables

@ECHO ON
SET FileType=*.jpg
SET ParentDir=C:\Users\Name\Desktop
SET Folders=("Folder1","Folder2","Folder3","Folder4")
SET LogFile=C:\Path\LogFile.txt

CD /D "%ParentDir%"
FOR %%X IN %Folders% DO FOR /F "TOKENS=*" %%F IN (

    'DIR /B /A-D ".\%%~X\%FileType%"'

) DO ECHO .\%%~X\%%~F>>"%LogFile%"
GOTO EOF

Further Reading and Resources

  • FOR /F
  • FOR
  • SET

FOR POWERSHELL - ONE LINER

You can also use PowerShell:

PS> Get-ChildItem -Recurse . | Resolve-Path -Relative

Or from cmd prompt or in a batch file:

powershell.exe "Get-ChildItem -Recurse . | Resolve-Path -Relative"

I was also looking for function to list the relative path only.

Here some alternative solutions...

(Please replace %cd% with your start path, e.g. C:\download\folder )

List all sub-directories and files with relative path to a specific start path:

@echo off
SET "StartPath=%cd%"

SetLocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in ('dir /B /ON /S "!StartPath!"') DO (
    set "SubDirsAndFiles=%%f"
    set "SubDirsAndFiles=!SubDirsAndFiles:%StartPath%=!"
    ECHO !SubDirsAndFiles! 
)

List selected file types only with the relative path to a specific start path (e.g. *.jpg, *.png):

@echo off
SET "StartPath=%cd%"

SetLocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in ('dir /B /ON /S "!StartPath!\*.jpg" "!StartPath!\*.png"') DO (
    set "SubDirsAndFiles=%%f"
    set "SubDirsAndFiles=!SubDirsAndFiles:%StartPath%=!"
    ECHO !SubDirsAndFiles! 
)

List all sub-directories and files with relative path to a specific start path (paths ends with \):

@echo off
SET "StartPath=%cd%"

SetLocal EnableDelayedExpansion
FOR /f "tokens=*" %%f in ('dir /B /ON /S "!StartPath!"') DO (
    set "SubDirsAndFiles=%%f"
    set "SubDirsAndFiles=!SubDirsAndFiles:%StartPath%=!"
    IF EXIST "!StartPath!\!SubDirsAndFiles!\" (
        REM Echo This is a folder...
        ECHO !SubDirsAndFiles!\
    ) ELSE (
        REM Echo This is a file...
        ECHO !SubDirsAndFiles!
    )
)