Windows批处理文件可以确定自己的文件名吗?
例如,如果我运行批处理文件C:\ Temp \ myScript.bat,myScript.bat中是否有可以确定字符串“myScript.bat”的命令?
答案 0 :(得分:120)
是。
使用特殊%0
变量获取当前文件的路径。
写%~n0
以获取没有扩展名的文件名。
编写%~n0%~x0
以获取文件名和扩展名。
也可以编写%~nx0
来获取文件名和扩展名。
答案 1 :(得分:34)
您可以获取文件名,但您也可以获取完整路径,具体取决于您在'%〜'和'0'之间的位置。从
中挑选d -- drive
p -- path
n -- file name
x -- extension
f -- full path
例如,从c:\ tmp \ foo.bat里面,%~nx0
给你“foo.bat”,而%~dpnx0
给出“c:\ tmp \ foo.bat”。请注意,这些部分总是按照规范顺序组装,所以如果你变得可爱并尝试%~xnpd0
,你仍然得到“c:\ tmp \ foo.bat”
答案 2 :(得分:30)
使用以下脚本,基于SLaks答案,我确定正确的答案是:
echo The name of this file is: %~n0%~x0
echo The name of this file is: %~nx0
这是我的测试脚本:
@echo off
echo %0
echo %~0
echo %n0
echo %x0
echo %~n0
echo %dp0
echo %~dp0
pause
我觉得有趣的是%nx0 不会起作用,因为我们知道'〜'字符通常用于从变量中去除/修剪引号。
答案 3 :(得分:8)
请记住0
是批处理文件中参数编号的特例,其中0
表示此文件在命令行中给出。
因此,如果文件是myfile.bat,您可以通过以下几种方式调用它,每个方法都会为%0
或{{1}提供不同的输出用法:
%~0
myfile
myfile.bat
mydir\myfile.bat
c:\mydir\myfile.bat
如果您从正确的相对位置调用它到它所在的目录,则以上所有都是合法调用。 "c:\mydir\myfile.bat"
删除了上一个示例中的引号,而%~0
则没有。
因为这些都会产生不同的结果,%0
和%0
不太可能是你真正想要使用的。
这是一个批处理文件来说明:
%~0
答案 4 :(得分:0)
@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