I have a directory with a bunch of folders in them. I want each folder to create a text file that lists all the files in that folder. The format to list files should look like this:

"001.jpg" "002.jpg" "003.jpg" "004.jpg"

basically it should list files with no linebreaks. How can I do this with using cmd in windows 7?

  • Heh, is there an xargs command for Windows? You're not using Powershell, are you?
    – ewwhite
    Feb 9 '13 at 9:24
  • 2
    This looks more like powershell programming which with your use of windows 7 (which isn't a server OS) means it's probably better asked on Stack Overflow or Super User.
    – user35787
    Feb 9 '13 at 9:31
  • Install CygWin and then ask this question again without mentioning Windows.
    – ruief
    Feb 9 '13 at 14:55

You can achieve the desired result using only the CMD shell by combining forfiles, for and delayed variable expansion (see also: cmd).


  1. Create a batch file (e.g., C:\jpglist.bat) and save the following instructions to it:

    @echo off
    if %2 == FALSE exit
    cd /D %1
    for %%a in (*.jpg) do set list=!list! "%%a"
    echo %list:~1%> jpglist.txt
  2. Open a command prompt.

  3. Execute

    forfiles /P PATH /S /C "cmd /V:on /C C:\jpglist.bat @path @isdir"

    where PATH is the full path of the main directory.

  4. The batch file is no longer needed. Delete it if you want.

How it works

The command:

  • forfiles /P PATH /S /C "..." goes recursively (/S) through PATH and its subdirectories and executes ... for every directory entry.

  • cmd /V:on /C ... opens a new shell with delayed variable expansion enabled (/V:on) and executes ....

  • C:\jpglist.bat @path @isdir calls the batch file and passes the entry's full path as first parameter.

    @isdir will be TRUE if @path is a directory; otherwise, it will be FALSE.

The batch file:

  • if %2 == FALSE exit exits immediately if the first argument is not a directory.

  • cd /D %1 changes to the directory specified in the first argument (/D enables switching drives in case it's needed).

  • for %%a in (*.jpg) do set list=!list! "%%a" goes through all files with a .jpg extension and adds their names to the variable list.

    Using !list! instead of %list% delays the variable's expansion, i.e., list will get expanded in every iteration, rather then only once at the beginning.

  • echo %list:~1%> jpglist.txt writes the contents of the variable list (except the first character, which will be a leading space) in a file named jpglist.txt in the current directory.

ForEach($_ In Get-ChildItem "C:\Folder\" -Recurse -Directory)
    ForEach($file In Get-ChildItem -File $_.FullName)
        [System.IO.File]::AppendAllText("$($_.FullName)\crazyList.txt", "`"$($file.Name)`" ", [System.Text.Encoding]::Unicode)

That outputs a file in each folder with a format exactly as you specified it, with quotation marks.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.