I have various functions that export Excel and text files, and need to have them named with a name based on the content of some variables in the function and the time and date. How can this be done with Mathematica?


In the answer linked here, I did the following:

out = FileNameJoin @ {$TemporaryDirectory, "MathematicaOutput" <> ToString /@ Date[] <> ".rtf"}


Then you would say Export[out, ...].

If you want to have the date in a more readable and less detailed form, you could use this for the name:

"file-" <> Riffle[ToString /@ Date[][[;;3]], "-"] <> ".pdf"


And of course, the content of any other variable could be inserted in the file name using ToString if needed. If you need a different separator between the data components, the Riffle command can be modified accordingly, by changing the second argument to another string that is allowed in filenames on your platform.

The FileNameJoin command is only needed if you'd like to create not just file names but directory structures in a cross-platform fashion.

| improve this answer | |

Here's a variation on Jens' answer:

"file-" <> DateString[Riffle[{"Year", "Month", "Day"}, "-"]] <> ".pdf"

==> "file-2012-05-19.pdf"

which has the advantage of automatically padding the month and day with zeros so that the file names will sort nicely.

| improve this answer | |
  • $\begingroup$ nice and clean! Thanks! $\endgroup$ – R Hall May 20 '12 at 0:46
  • 2
    $\begingroup$ This answer is shorter without Riffle: "file-" <> DateString[{"Year", "-", "Month", "-", "Day"}] <> ".pdf" $\endgroup$ – Mr.Wizard May 20 '12 at 16:38

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.