Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何查找当前批处理文件&x27;s名称并作为变量存储?_Windows_Batch File - Fatal编程技术网

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

  • 在对子例程的调用中获取批处理文件的名称

myBatchFile.cmd

@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