Ниже мой исходный код:
@echo off
Set z=%%
echo.
echo %z%0.......%0
echo %z%~0......%~0
echo %z%n0......%n0
echo %z%x0......%x0
echo %z%~n0.....%~n0
echo %z%dp0.....%dp0
echo %z%~dp0....%~dp0
echo.
Я заметил, что имя файла, заданное% ~ 0 и% 0, является способом, которым оно было введено в командной оболочке, а не тем, как этот файл фактически назван. Поэтому, если вы хотите использовать буквенный регистр для имени файла, вы должны использовать% ~ n0. Однако это исключит расширение файла. Но если вы знаете имя файла, вы можете добавить
следующий код
set b=%~0
echo %~n0%b:~8,4%
Я узнал, что ": ~ 8,4%" означает начинать с 9-го символа переменной и затем показывать показ следующих 4 символов. Диапазон от 0 до конца переменной строки. Так что% Path% будет очень длинным!
fIlEnAmE.bat
012345678901
Однако это не так хорошо, как решение Джула (% ~ x0) выше.
Мои доказательства:
C:\bin>filename.bat
%0.......filename.bat
%~0......filename.bat
. . .
C:\bin>fIlEnAmE.bat
%0.......fIlEnAmE.bat
%~0......fIlEnAmE.bat
%n0......n0
%x0......x0
%~n0.....FileName
%dp0.....dp0
%~dp0....C:\bin\
%~n0%b:~8,4%...FileName.bat
Press any key to continue . . .
C:\bin>dir
Volume in drive C has no label.
Volume Serial Number is CE18-5BD0
Directory of C:\bin
. . .
05/02/2018 11:22 PM 208 FileName.bat
Вот окончательный код
@echo off
Set z=%%
set b=%~0
echo.
echo %z%0.......%0
echo %z%~0......%~0
echo %z%n0......%n0
echo %z%x0......%x0
echo %z%~n0.....%~n0
echo %z%dp0.....%dp0
echo %z%~dp0....%~dp0
echo.
echo A complex solution:
echo ===================================
echo %z%~n0%z%b:~8,4%z%...%~n0%b:~8,4%
echo ===================================
echo.
echo The preferred solution:
echo ===================================
echo %z%~n0%z%~x0.......%~n0%~x0
echo ===================================
pause