# Iterate through folder foreach picture, possible?

Is it possible to iterate through a folder containing pictures while first filtering file extension tikz,png,pdf or eps, and then getting a list of filenames of the directory for use in a for loop, and add them using their filename as image text in my latex code?? I tried googling code examples but no luck yet.

• Windows? Unix? Linux? Which? Aug 2 '14 at 16:19
• What would extension .tikz be? Raw tikz code to be included with \input? Would there be any duplicate filenames independent of extension (e.g. foo.png and foo.eps)? Aug 2 '14 at 16:22
• Sorry I mean windows. .tikz is matlab2tikz output, last question yes there would Aug 2 '14 at 16:32
• Dec 8 '17 at 10:55

This answer had been prepared long time ago and I am waiting for someone to ask it. Here (click) is the history.

## Batch.bat

rem batch.bat
echo off

rem %1 path (relative to the main input file) to the files to be iterated
rem %2 output file name
rem remaining args represent the extension of file to be iterated

set curdir=%CD%
cd "%~1"
shift

rem output must be enclosed with "" to allow spaces in the path
set output="%curdir%\%~1.list"

if exist %output% del %output%
copy nul %output%
shift

:loop
if "%~1"=="" goto :eof
dir /b *.%~1 >> %output%
shift
goto :loop


## filename.tex

% filename.tex must be compiled with
% pdflatex -shell-escape filename.tex
\documentclass[preview,border=12pt]{standalone}
\usepackage{graphicx}

\newcount\TotalFiles

\makeatletter
\newcommand\IterateImages[2]{%
% #1: directory path with a trailing /
% #2: a list of file extensions: eps pdf jpg png
\immediate\write18{batch "#1" \jobname\space #2}
\loop
\filename@parse{\filename}
\section*{\filename}
\begin{center}
\includegraphics[scale=0.1]{"#1\filename@base"}
\end{center}
\endgraf
\repeat
}
\makeatother

\begin{document}
% ./ also works
\IterateImages{Sample Pictures/}{jpg png pdf}

\section*{Summary}
There is(are) \the\TotalFiles\ file(s) in total.
\end{document}


## Output

To prove that I did not lie.

## Notes

For security reason, filecontents does not allow us to create batch.bat on the fly.

• Thanks!! Absolutely outrageous!! To answer this so fast so comprehensive. Cool to think of a batch script to handle this. Last minor request: How to skip extensions in the resulting output image text?? Would it be possible without batch scripts?? I guess not? Aug 2 '14 at 17:17
• @BigChief: You can use \filename@base if you want the filename without extension. Using batch file is the best approach in my opinion. Aug 2 '14 at 17:20
• You can create the bat-file on the fly by first writing a batch.txt and then use write18 to rename it. But I would probably prefer a .lua script instead of a batch script. Aug 2 '14 at 17:41
• forget about it got everything up and running Aug 4 '14 at 15:09

Running on OSX I need to add
\endlinechar=-1
to remove the default character added to the end of the input line.

\documentclass[]{article}
\usepackage{graphicx}
\usepackage[hyphenbreaks]{breakurl}
\usepackage[space]{grffile}% used to allow spaces within the filenames
\newcommand\IterateLines[2]{
\immediate\write18{ls -1 "#1" > \jobname.txt}
\endlinechar=-1
\loop
{\line}\par
\includegraphics[width=2cm]{{#1\line}} %
\par
\repeat