You could continue with the -d
idea, and simply rename any extracted file to the desired "zip name minus the zip plus txt":
mkdir tmpfor f in *.zip; do unzip "$f" -d tmp && mv tmp/* "${f%.zip}.txt"; donermdir tmp
Alternatively, you could pipe the output from unzip into the appropriately-named file:
for f in *.zip; do unzip -p "$f"> "${f%.zip}.txt"; done