Loop over folder string and parse out last folder name

后端 未结 13 1477
-上瘾入骨i
-上瘾入骨i 2020-12-03 05:39

I need to grab the folder name of a currently executing batch file. I have been trying to loop over the current directory using the following syntax (which is wrong at prese

13条回答
  •  悲&欢浪女
    2020-12-03 06:12

    3 lines of script gets the result...

    Found 2 additional ways to accomplish the goal, and unlike the other answers to this question, it requires no batch "functions", no delayed expansion, and also does not have the limitation that Tim Peel's answer has with directory deepness :

    @echo off
    SET CDIR=%~p0
    SET CDIR=%CDIR:~1,-1%
    SET CDIR=%CDIR:\=,%
    SET CDIR=%CDIR: =#%
    FOR %%a IN (%CDIR%) DO SET "CNAME=%%a"
    ECHO Current directory path: %CDIR%
    SET CNAME=%CNAME:#= %
    ECHO Current directory name: %CNAME%
    pause
    

    REVISION: after my new revsion, here is an example output:

    Current directory path: Documents#and#Settings,username,.sqldeveloper,tmp,my_folder,MY.again
    Current directory name: MY.again
    Press any key to continue . . .
    

    This means that the script doesn't handle '#' or ',' in a folder name but can be adjusted to do so.

    ADDENDUM: After asking someone in the dostips forum, found an even easier way to do it:

    @echo off
    SET "CDIR=%~dp0"
    :: for loop requires removing trailing backslash from %~dp0 output
    SET "CDIR=%CDIR:~0,-1%"
    FOR %%i IN ("%CDIR%") DO SET "PARENTFOLDERNAME=%%~nxi"
    ECHO Parent folder: %PARENTFOLDERNAME%
    ECHO Full path: %~dp0
    pause>nul
    

提交回复
热议问题