Смотрите ответ от Кодзиро. Однако здесь есть хитрость, если вы действительно не можете использовать пробелы или длинные имена файлов, потому что инструменты, которые вы вызываете, не поддерживают это. У меня был этот случай с некоторыми инструментами сборки от MS.
Поскольку короткие имена файлов не могут содержать пробелов, мы можем использовать:
%~sI
... где I
- номер параметра текущего подпрограммы (или сценария). Поскольку эта функция работает только с пронумерованными параметрами, возможно, вам придется использовать косвенное обращение, например:
call :mysub "%ProgramFiles%"
:mysub
set VARIABLE=%~s0
goto :eof