You can do that with Mp3Tag.
Go to Tools > Options >tags and add *.txt and *.jpg with the semicolon-delimiter to "restrict incoming files to".
Load all album-folders to Mp3Tag.
Then filter for your TXT- JPG-files.
Use the Coverter - TAG-Filename.
Format String: %_directory% - %_filename%
The solution I told you works because MP3Tag knows of the tags (Metag-data embedded in files) but also knows lets call it pseudo-tags (information tags), which are not embedded in the files itself.
So you can't use the artist-tag or the album-tag because in your jpg- and txt-files there is no such tag embedded and Mp3Tag could not handle them anyway, because they are no music-files.
So in my suggestion I used these pseudo-tags:
%_directory% (the directory in which the file resides)
%_filename% (the present name of the file without extension)
If your files you want to rename reside in a subdirectoty of the directory thats carries information of artist and/or album in its name, you can use %_parent_directory% instead of %_directory% to rename your files.
So you just would have to use:
%_parent_directory% - %_filename%
But I wonder why you say my original-solution works, because obviously the year is in the name of the directory too.
Do you want the year to be in the name of the txt- and -jpg-files too?
Otherwise you have to change the format string to:
$cutright(%_parent_directory%,7) in this case cuts 7 characters from the name of the parent-directory starting from the end of the name.
This naturally only works like this in the case that there is always a year in the name.