The code below makes it possible to extract the filename from the filename being executed through the SYSIN-option in SAS.
%macro GetProgramNameFromBatch(_PgmName=);
%let PgmName = &_PgmName;
%let PgmNameRev = %sysfunc(reverse(&PgmName));
%let SlashPos = %index(&PgmNameRev, /);
%if &SlashPos eq 0 %then
%do;
%let SlashPos = %index(&PgmNameRev, \);
%end;
%if &SlashPos ne 0 %then
%do;
%let PgmNameRev = %substr(&PgmNameRev, 1, %eval(&SlashPos-1));
%let PgmName = %sysfunc(reverse(&PgmNameRev));
%end;
%else
%do;
%let PgmName = %sysfunc(reverse(&PgmNameRev));
%end;
&PgmName
%mend;
%let PgmName = %GetProgramNameFromBatch(_PgmName=/sas/Batchjobs/Test.sas);
%put Programname = &PgmName;
%let PgmName = %GetProgramNameFromBatch(_PgmName=c:\sas\Test_sysin.sas);
%put Programname = &PgmName;
%let PgmName = %GetProgramNameFromBatch(_PgmName=Test_sysin.sas);
%put Programname = &PgmName;