Windowsbatch file可以确定自己的文件名吗?

Windowsbatch file可以确定自己的文件名吗?

例如,如果我运行batch fileC:\ Temp \ myScript.bat,myScript.bat中是否有可以确定string“myScript.bat”的命令?

是。

使用特殊的%0variables来获取当前文件的path。

%~n0来得到没有扩展名的文件名。

%~n0%~x0来得到文件名和扩展名。

使用以下脚本,基于SLaks的答案,我确定了正确的答案是:

 echo The name of this file is: %~n0%~x0 echo The name of this file is: %~nx0 

这是我的testing脚本:

 @echo off echo %0 echo %~0 echo %n0 echo %x0 echo %~n0 echo %dp0 echo %~dp0 pause 

我觉得有趣的是, %nx0不会工作,因为我们知道'〜'字符通常被用来从一个variables中去除/修剪引号。

你可以得到文件名,但你也可以得到完整的path,取决于你在'%〜'和'0'之间的位置。 从你的select

 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”

请记住,0是batch file中参数编号的特殊情况,其中0表示在命令行中给出的此文件

所以如果这个文件是myfile.bat,你可以用下面几种方法调用它,每一个都会给你一个不同于 %0或%〜0用法的输出:

MYFILE

myfile.bat

MYDIR \ myfile.bat

C:\ MYDIR \ myfile.bat

“C:\ MYDIR \ myfile.bat”

如果您从正确的相对位置调用它到存在的目录,所有以上都是合法调用。 %〜0去掉最后一个例子中的引号,而%0没有。

因为这些都给出了不同的结果,%0和%〜0是不太可能是你真正想要使用的。

这里有一个batch file来说明:

 @echo Full path and filename: %~f0 @echo Drive: %~d0 @echo Path: %~p0 @echo Drive and path: %~dp0 @echo Filename without extension: %~n0 @echo Filename with extension: %~nx0 @echo Extension: %~x0 @echo Filename as given on command line: %0 @echo Filename as given on command line minus quotes: %~0 @REM Build from parts @SETLOCAL @SET drv=%~d0 @SET pth=%~p0 @SET fpath=%~dp0 @SET fname=%~n0 @SET ext=%~x0 @echo Simply Constructed name: %fpath%%fname%%ext% @echo Fully Constructed name: %drv%%pth%%fname%%ext% @ENDLOCAL pause 

%0是你在找什么。 看到这个问题更多。

 echo %0 

尝试运行下面的例子,以感受神奇的variables如何工作。

 @echo off SETLOCAL EnableDelayedExpansion echo Full path and filename: %~f0 echo Drive: %~d0 echo Path: %~p0 echo Drive and path: %~dp0 echo Filename without extension: %~n0 echo Filename with extension: %~nx0 echo Extension: %~x0 echo date time : %~t0 echo file size: %~z0 ENDLOCAL 

相关规则如下。

 %~I - expands %I removing any surrounding quotes ("") %~fI - expands %I to a fully qualified path name %~dI - expands %I to a drive letter only %~pI - expands %I to a path only %~nI - expands %I to a file name only %~xI - expands %I to a file extension only %~sI - expanded path contains short names only %~aI - expands %I to file attributes of file %~tI - expands %I to date/time of file %~zI - expands %I to size of file %~$PATH:I - searches the directories listed in the PATH environment variable and expands %I to the fully qualified name of the first one found. If the environment variable name is not defined or the file is not found by the search, then this modifier expands to the empty string