.bat当前文件夹名称

在我的蝙蝠脚本中,我正在调用另一个脚本并传递一个string参数

cscript log.vbs "triggered from folder <foldername> by Eric" 

您可以看到的string参数包含脚本被调用的文件夹的名称。 什么是正确的方式来通过这个dynamic插入这个文件夹名称的脚本?

如果你想要的目录,你可以从%cd% 。 这是你目前的工作目录。

如果您要在脚本执行期间更改当前的工作目录,请在开始时保存它:

 set startdir=%cd% 

那么你可以在你的代码中使用%startdir% ,不管稍后有什么变化(影响%cd% )。


如果您只想获取该路径的最后一个组件(根据您的评论),则可以将以下内容用作基准:

     @setlocal enableextensions enabledelayedexpansion
     @echo关闭
    设置startdir =%cd%
    设置温度=%startdir%
    设置文件夹=
 :循环
    如果不是“x%temp:〜-1%”==“x \”(
        设置文件夹=!temp:〜-1 !!文件夹!
        设置temp =!temp:〜0,-1!
         goto:循环
     )
     echo.startdir =%startdir%
     echo.folder =%文件夹%
     endlocal &&设置文件夹=%文件夹%

这输出:

     C:\ Documents and Settings \ Pax> testprog.cmd
     startdir = C:\ Documents and Settings \ Pax
    文件夹= Pax

它通过复制完整路径末尾的字符(一次一个),直到找到\ separator。 它既不漂亮也不高效,但Windows批处理编程很少:-)

编辑

实际上,有一个简单而有效的方法来获取最后的组件名称。

 for %%F in ("%cd%") do set "folder=%~nxF" 

对于这种情况不是一个问题,但是如果你正在处理一个包含可能或不可能以\结尾的路径的变量,那么你可以通过追加\.确保正确的结果\.

 for %%F in ("%pathVar%\.") do set "folder=%~nxF" 

试试%〜dp0。

这里: http : //weblogs.asp.net/whaggard/archive/2005/01/28/get-directory-path-of-an-executing-batch-file.aspx