Lionel Messi's first-half goal earned visiting Barcelona a 1-1 draw last night and a 3-1 aggregate win over Real Sociedad, setting up their fourth Copa del Rey final in six years.
Barca lifted the trophy in 2009 and 2012 but were beaten in the 2011 final by Real Madrid who defeated Atletico Madrid 2-0 on Tuesday and on aggregate.
Sociedad, who have not won the competition since 1987, were hoping for an unlikely comeback having lost 2-0 at the Nou Camp but could only find the net late through Antoine Griezmann in their semi-final second leg.
"The team are used to getting to finals and this is a reward for their effort them and I accompany them in trying to achieve their aims," Barcelona coach Gerardo Martino told reporters.
"We had a lot of chances and the aim was to not let them back into the game. The players were motivated for another final. For the first 15-20 minutes we were tight at the back and didn't give Real the chances they had later on. There are still areas we need to improve on."
Barca have not been at their best since Christmas but remain in contention on all fronts. They are top of La Liga and meet Manchester City in the last 16 of the Champions League later this month.
With the visitors having more possession, Real concentrated on using their pace on the counter with Carlos Vela and Griezmann. The Basque side did cause problems but Jose Angel made a mistake from which Messi took full advantage.
The full-back's pass went straight to the Argentinian who drew the centre-halves and shot from the edge of the area with the ball trickling into the net after keeper Enaut Zubikarai got a hand to it.
Pedro was then denied in front of goal by Zubikarai and Vela's control was not good enough at the other end as Jose Manuel Pinto smothered his shot.
Vela hit the crossbar with a curling strike after the break but there were also clear chances for Messi, Cesc Fabregas and Dani Alves to extend Barca's lead.
Three minutes from the end Chory Castro crossed for Griezmann to give Sociedad a draw on the night.