I use this a few dozen times per week. Super useful. Place in your %WINDIR% directory as f.bat and call via Win+R.
REM /**
REM * Create datestamped filename via run dialog
REM * Location: %WINDIR%/f.bat
REM *
REM * Usage: [Win+R] > 'call notes from emily about project scope'
REM * Output: 2017-11-14_call-notes-from-emily-about-project-scope
REM * Caveats: No real string sanitization, so special chars like "&" will break it.
REM */
@echo off
@setlocal enabledelayedexpansion
REM *** Convert everything to lowercase
REM @source https://stackoverflow.com/a/23806517
set _STRING=%*
set "_UCASE=ABCDEFGHIJKLMNOPQRSTUVWXYZ"
set "_LCASE=abcdefghijklmnopqrstuvwxyz"
for /l %%a in (0,1,25) do (
call set "_FROM=%%_UCASE:~%%a,1%%
call set "_TO=%%_LCASE:~%%a,1%%
call set "_STRING=%%_STRING:!_FROM!=!_TO!%%
)
REM *** Get system date
REM *** @source https://stackoverflow.com/a/3202796
@setlocal enableextensions
if "%date%A" LSS "A" (set toks=1-3) else (set toks=2-4)
for /f "tokens=2-4 delims=(-)" %%a in ('echo:^|date') do (
for /f "tokens=%toks% delims=.-/ " %%i in ('date/t') do (
set '%%a'=%%i
set '%%b'=%%j
set '%%c'=%%k))
if %'yy'% LSS 100 set 'yy'=20%'yy'%
set Today=%'yy'%-%'mm'%-%'dd'%
ENDLOCAL & SET v_year=%'yy'%& SET v_month=%'mm'%& SET v_day=%'dd'%
set _DATE=%V_Year%-%V_Month%-%V_Day%
REM *** Replace spaces with underscores
SET _STRING=%_STRING: =_%
REM *** beep at the user!
REM *** @source https://stackoverflow.com/a/39541079
rundll32 user32.dll,MessageBeep
REM *** Fire the prompt()
mshta javascript:prompt("Filename generated successfully!","%_DATE%_%_STRING%");close();