如何获取运行命令的目录名称

如何获取运行命令的目录名称

我有一个这样的文件夹C:\repos\3333-new-feature。从该位置,在 git bash 终端中,我运行一个 bat 文件:

/c/repo/3333-new-feature
$ myBat.bat

该 bat 中的一条指令应该使用目录名称,如下所示:

git flow feature start 3333-new-feature

我怎样才能创建一个仅包含当前目录名称的变量?例如git flow feature start %currentDirectory%

答案1

您不清楚自己到底在寻找什么。

如果您想要正在运行的批处理脚本所在文件夹的名称,那么您所需要的就是"%~nx0"

如果您想要当前目录路径中的最后一个文件夹名称,那么

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

请注意,如果当前目录恰好是根目录,则文件夹将未定义。

无论您使用哪种形式,~nx都是一个修饰符,它返回给定路径的叶节点的名称和扩展名。有关参数和 FOR 变量修饰符的更多信息,请在命令行中输入HELP FORHELP CALL。在这两种情况下,修饰符的解释都在帮助的末尾。

还请注意,虽然%0如果当前在 ed 例程中,将扩展为标记例程的名称CALL,但添加任何修饰符(如)%~nx0将始终引用批处理文件。这非常方便。

答案2

您可以使用.带或不带/d(目录)的相对路径:

for %f in (.)      // Obs.:  by using "." you don't need "" in (".")

::  or...

for /d %f in (.)   // Obs.:  by using "." you don't need "" in (".")

在命令行中:

for %F in (.)do set "folder=%~nxF"
for /d %F in (.)do set "folder=%~nxF"

/文件:

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

:: Or...
for %%F in (.)do git flow feature start "%%~nxF"

:: -----------------------------------------------

for /d %%F in (.)do set "folder=%%~nxF"

:: Or...
for /d %%F in (.)do git flow feature start "%%~nxF"

或者,您可以连接/到您的路径,替换\//,也可以删除和而不在一行中:使用循环for

在命令行或/文件

:: concatenate "\" + _current_path + removing ":"  => : => /c\repo\3333-new-feature
set "_path=/%cd::=%" 

:: replace any "\" in C:\repos\3333-new-feature to "/"  => "\" => /c/repo/3333-new-feature
git flow feature start %_path:\=/%   

:: the same in one line
set "_path=/%cd::=%" && cmd/v/c "git flow feature start !_path:\=/!"

:: the same in one line if any folder have space/special character, use dobblequotes in "path"
set "_path=/%cd::=%" && cmd /q /v /s /c "git flow feature start "!_path:\=/!""

:: in command line:
@set "_path=/%cd::=%" && cmd /q /v /s /r "@echo\git flow feature start %_path:\=/%"

您也可以直接尝试使用.考虑到它是当前目录:

git flow feature start .
cd /d "C:\repos\3333-new-feature" && git flow feature start .

相关内容