Пакет: получение последнего имени папки по абсолютному пути - PullRequest
2 голосов
/ 31 августа 2011

Я использую пакетный скрипт для автоматического резервного копирования файлов на мой NAS, и мне нужно получить последнее имя папки по абсолютному пути, например, от «C: \ Things \ Folder» до «Folder»

Ответы [ 3 ]

5 голосов
/ 31 августа 2011

Это что-то вроде хака, но вы можете использовать:

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%
2 голосов
/ 24 августа 2012

Чтобы не было проблем с пробелом, я предлагаю этот код:

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%
0 голосов
/ 14 сентября 2011

Предполагая 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
...