.bat当前文件夹名称

时间:2010-10-03 04:24:39

标签: windows batch-file

在我的bat脚本中,我正在调用另一个脚本并将其传递给字符串参数

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

您可以看到字符串参数包含从中调用脚本的文件夹的名称。传递此动态的正确方法是将此文件夹名称动态插入脚本吗?

2 个答案:

答案 0 :(得分:19)

如果您想要目前所在的目录,可以从%cd%获取该目录。那是你当前的工作目录。

如果您要在脚本执行期间更改当前工作目录,只需将其保存在开头:

set startdir=%cd%

然后您可以在代码中使用%startdir%,无论以后是否有任何更改(影响%cd%)。


如果您只想获取该路径的 last 组件(根据您的评论),您可以使用以下内容作为基线:

    @setlocal enableextensions enabledelayedexpansion
    @echo off
    set startdir=%cd%
    set temp=%startdir%
    set folder=
:loop
    if not "x%temp:~-1%"=="x\" (
        set folder=!temp:~-1!!folder!
        set temp=!temp:~0,-1!
        goto :loop
    )
    echo.startdir = %startdir%
    echo.folder   = %folder%
    endlocal && set folder=%folder%

输出:

    C:\Documents and Settings\Pax> testprog.cmd
    startdir = C:\Documents and Settings\Pax
    folder   = Pax

它的工作原理是从完整路径的末尾复制字符,一次一个,直到找到\分隔符。它既不漂亮也不高效,但Windows批量编程很少是: - )

修改

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

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

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

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

答案 1 :(得分:8)