下面是我的初始代码:
@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 给出的文件名是它在命令 shell 中输入的方式,而不是该文件的实际命名方式。因此,如果您希望文件名使用文字大小写,则应使用 %~n0。但是,这将省略文件扩展名。但是,如果您知道文件名,则可以添加
以下代码。
set b=%~0
echo %~n0%b:~8,4%
我了解到 ":~8,4%" 表示从变量的第 9 个字符开始,然后显示接下来的 4 个字符。范围是 0 到变量字符串的末尾。所以 %Path% 会很长!
fIlEnAmE.bat
012345678901
但是,这不如上面Jool 的解决方案(%~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