Seu problema é que um arquivo batch funciona da seguinte maneira: Ele executa um comando e aguarda que o comando termine antes de ir para o próximo.
Então, no seu caso, ele aguarda no portableshell.bat até que seja concluído, o que provavelmente não acontece.
Felizmente, existem vários métodos que você pode executar para executar um comando e pular para o próximo sem esperar que o primeiro seja concluído. Para chamar arquivos em lote, você pode usar o arquivo filename.bat para chamá-lo e pular imediatamente para a próxima linha.
Seu arquivo de lote ficaria assim:
call portableshell.bat
perl ..\MiKTeX\texmfs\install\scripts\latexdiff\latexdiff.pl
Se você tiver executáveis, como o perl, para o qual deseja que aconteça a mesma coisa, use o comando start
.
Embora o acima deve funcionar, se isso não acontecer, você pode querer editar o arquivo portableshell.bat e anexar o comando perl no final.