我有一个这样的文件夹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 FOR
或HELP 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 .