我需要获取当前正在执行的批处理文件的文件夹名称.我一直在尝试使用以下语法循环当前目录(目前这是错误的):
set mydir = %~p0 for /F "delims=\" %i IN (%mydir%) DO @echo %i
几个问题我似乎无法将'mydir'变量值作为搜索字符串传递.如果我传入命令,它似乎只能起作用; 我的语法错误,无法解决原因.
我的想法是使用'\'分隔符循环文件夹字符串,但这也会导致问题.如果我在每个循环上设置一个变量,那么最后一个值集将是当前文件夹名称.例如,给定以下路径:
C:\ Folder1中\文件夹2\Folder3\Archive.bat
我希望解析出'Folder3'的值.
我需要解析该值,因为它的名称将是我将在批处理文件中进一步创建的另一个文件夹的一部分.
非常感谢有人可以提供帮助.我可能会完全咆哮错误的树,所以任何其他方法也会受到极大的欢迎.
在努力解决其中一些建议后,我发现成功使用了以下1个衬垫(在Windows 2008中)
for %%a in (!FullPath!) do set LastFolder=%%~nxa
你非常接近它:)这应该工作:
@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
出于某种原因,for命令不喜欢'\'作为分隔符,因此我将所有'\'转换为';' 第一(SET mydir=%mydir:\=;%
)
当我想找到当前目录的最后一段时,我找到了这个旧线程.以前的作者回答引导我到以下几点:
FOR /D %%I IN ("%CD%") DO SET _LAST_SEGMENT_=%%~nxI ECHO Last segment = "%_LAST_SEGMENT_%"
如前所述,不要忘记在使用%_LAST_SEGMENT_%创建的任何路径周围加引号(就像我在我的示例中使用%CD%一样).
希望这有助于某人......