循环文件夹字符串并解析出最后一个文件夹名称

Tim*_*eel 15 windows cmd batch-file

我需要获取当前正在执行的批处理文件的文件夹名称.我一直在尝试使用以下语法循环当前目录(目前这是错误的):

set mydir = %~p0
for /F "delims=\" %i IN (%mydir%) DO @echo %i
Run Code Online (Sandbox Code Playgroud)

几个问题我似乎无法将'mydir'变量值作为搜索字符串传递.如果我传入命令,它似乎只能起作用; 我的语法错误,无法解决原因.

我的想法是使用'\'分隔符循环文件夹字符串,但这也会导致问题.如果我在每个循环上设置一个变量,那么最后一个值集将是当前文件夹名称.例如,给定以下路径:

C:\ Folder1中\文件夹2\Folder3\Archive.bat

我希望解析出'Folder3'的值.

我需要解析该值,因为它的名称将是我将在批处理文件中进一步创建的另一个文件夹的一部分.

非常感谢有人可以提供帮助.我可能会完全咆哮错误的树,所以任何其他方法也会受到极大的欢迎.

小智 20

在努力解决其中一些建议后,我发现成功使用了以下1个衬垫(在Windows 2008中)

for %%a in (!FullPath!) do set LastFolder=%%~nxa
Run Code Online (Sandbox Code Playgroud)

  • 如果其他人没有像我一样立即看到相关性,那么`%% ~nxa`变量的最后一个字符必须等于所使用的FOR变量.所以,'%% a` ==`%% ~nxa`,`%% g` ==`%% ~nxg`等. (5认同)

Pat*_*uff 10

你非常接近它:)这应该工作:

@echo OFF
set mydir="%~p0"
SET mydir=%mydir:\=;%

for /F "tokens=* delims=;" %%i IN (%mydir%) DO call :LAST_FOLDER %%i
goto :EOF

:LAST_FOLDER
if "%1"=="" (
    @echo %LAST%
    goto :EOF
)

set LAST=%1
SHIFT

goto :LAST_FOLDER
Run Code Online (Sandbox Code Playgroud)

出于某种原因,for命令不喜欢'\'作为分隔符,因此我将所有'\'转换为';' 第一(SET mydir=%mydir:\=;%)

  • 它喜欢 `|` 作为分隔符就好了,你只需要将 %mydir% 放在引号中,就像 `%%i IN ("%mydir%")` (2认同)

小智 6

当我想找到当前目录的最后一段时,我找到了这个旧线程.以前的作者回答引导我到以下几点:

FOR /D %%I IN ("%CD%") DO SET _LAST_SEGMENT_=%%~nxI
ECHO Last segment = "%_LAST_SEGMENT_%"
Run Code Online (Sandbox Code Playgroud)

如前所述,不要忘记在使用%_LAST_SEGMENT_%创建的任何路径周围加引号(就像我在我的示例中使用%CD%一样).

希望这有助于某人......