Windows 如何查找当前批处理文件&x27;s名称并作为变量存储?
我有一个批处理文件。命令是什么/如何查找当前正在运行的批处理文件的名称并将其存储为变量 例如: 如果批处理文件Windows 如何查找当前批处理文件&x27;s名称并作为变量存储?,windows,batch-file,Windows,Batch File,我有一个批处理文件。命令是什么/如何查找当前正在运行的批处理文件的名称并将其存储为变量 例如: 如果批处理文件hello.bat正在运行,如何将名称(hello.bat)存储为变量。请尝试以下操作 set "currentname=%~nx0" echo %currentname% 或 在批处理文件中,%0是对批处理文件本身的引用%~nx0是批处理文件的名称和扩展名for/?帮助包括可以从文件引用中获得的可能值的完整列表,如完整路径、文件大小、时间戳等 已编辑-如注释中所述,使用shift命令
hello.bat
正在运行,如何将名称(hello.bat)存储为变量。请尝试以下操作
set "currentname=%~nx0"
echo %currentname%
或
在批处理文件中,%0是对批处理文件本身的引用%~nx0
是批处理文件的名称和扩展名for/?
帮助包括可以从文件引用中获得的可能值的完整列表,如完整路径、文件大小、时间戳等
已编辑-如注释中所述,使用shift
命令(用于在%9
将较高参数转换为较低参数后访问批处理文件参数),%0
的值会被%1
的内容覆盖,从而无法读取其原始引用。因此,选择是
- 在发出
命令之前检索该值shift
- 如果启用了扩展,则
命令允许指定从何处开始移位参数,因此,不要发出shift
命令,而是使用shift
指示哪些shift/1
将是第一个被覆盖的参数,并保护%1
%0
- 在对子例程的调用中获取批处理文件的名称
@echo off
rem shifting arguments
shift
rem Get reference to current batch file
call :getMyName
echo %myName%
exit /b
:getMyName
set "myName=%~nx0"
exit /b
两个答案之间的区别在于,第一个答案将为您提供带有扩展名的名称,第二个答案将为您提供不带扩展名的名称。当然,echo%currentname%只是为了显示您的变量内容以进行调试,但您可以将其从最终答案中删除code@foxidrive,我忘了任何选择吗?那很有效。使用shift后获取批处理文件名的方法是一种新颖的方法。干得好。
set "myName=%~nx0"
@echo off
rem shifting arguments
shift
rem Get reference to current batch file
call :getMyName
echo %myName%
exit /b
:getMyName
set "myName=%~nx0"
exit /b