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