批处理:从绝对路径获取最后一个文件夹名称

时间:2011-08-30 22:27:33

标签: path batch-file directory absolute

我正在使用Batch脚本自动将文件备份到我的NAS,我需要从绝对路径获取最后一个文件夹名称,例如从“C:\ Things \ Folder”到“Folder”

3 个答案:

答案 0 :(得分:5)

这有点像黑客,但你可以使用:

Set NasPath=C:\Things\Folder
Set NasFolder=%NasPath%
:GetFolder
Set GetFolderTemp=%NasFolder:*\=%
If Not %GetFolderTemp%==%NasFolder% (
    Set NasFolder=%GetFolderTemp%
    Goto :GetFolder
)
Echo NasPath  =%NasPath%
Echo NasFolder=%NasFolder%
Exit /B

无论你做什么,都不要在Set NasPath=...声明的任何部分加上引号。用这种方式引用:

Set FromPath=C:\Program Files\Blah
Set NasPath=C:\Things\Folder
RoboCopy "%FromPath%" "%NasPath%"

不要以这种方式使用引号:

Set FromPath="C:\Program Files\Blah"
Set NasPath="C:\Things\Folder"
RoboCopy %FromPath% %NasPath%

答案 1 :(得分:2)

对于空间没有任何问题,我建议使用以下代码:

Set NasPath=C:\Things\My Space\Folder
Set GetFolderTemp=%NasPath%
:GetFolder
FOR /F "tokens=1,* delims=\" %%1 IN ("%GetFolderTemp%") do (
set NasFolder=%%1
set GetFolderTemp=%%2
)
if not "a%GetFolderTemp%"=="a" goto :GetFolder

echo %NasFolder%

答案 2 :(得分:0)

假设C:\Program Files\Mickey\Mouse - 类似路径(没有引号),您还可以使用以下代码:

setlocal EnableDelayedExpansion

set path=C:\Program Files\Microsoft\Mickey\Mouse
:shift
for /f "tokens=1* delims=\/" %%i in ( "!path!" ) do (
    set folder=%%i
    set path=%%j
)
if not [!path!] == [] goto :shift

echo folder: !folder!

endlocal