.bat current folder name

前端 未结 2 2130
说谎
说谎 2020-12-16 05:05

In my bat script, I\'m calling another script and passing it a string parameter

cscript log.vbs \"triggered from folder  by Eric\"
<         


        
2条回答
  •  攒了一身酷
    2020-12-16 05:57

    If you want the directory where you're currently at, you can get that from %cd%. That's your current working directory.

    If you're going to be changing your current working directory during the script execution, just save it at the start:

    set startdir=%cd%
    

    then you can use %startdir% in your code regardless of any changes later on (which affect %cd%).


    If you just want to get the last component of that path (as per your comment), you can use the following as a baseline:

        @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%
    

    This outputs:

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

    It works by copying the characters from the end of the full path, one at a time, until it finds the \ separator. It's neither pretty nor efficient, but Windows batch programming rarely is :-)

    EDIT

    Actually, there is a simple and very efficient method to get the last component name.

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

    Not an issue for this situation, but if you are dealing with a variable containing a path that may or may not end with \, then you can guarantee the correct result by appending \.

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

提交回复
热议问题