Как извлечь путь к папке из строки в пакетном скрипте - PullRequest
1 голос
/ 05 октября 2011

Я работал над созданием утилиты упаковки, которая в основном получает все добавленные / измененные файлы между двумя ревизиями SVN, затем копирует их локально и архивирует их. До сих пор я был в состоянии успешно извлечь все измененные файлы между двумя ревизиями.

Чтобы продолжить, я использую xcopy для рекурсивного создания папок в определенном каталоге.

Предполагается, что следующие файлы изменились, когда я проверяю две ревизии с помощью команды svn diff

/temp1/temp2/temp3/temfile.txt
/temp1/temp21/temp31/tempfile.txt
/temp1/temp2/ (folder created)
/temp1/temp2/temp3 (folder created)

Чтобы XCopy работал, я делаю

xcopy local/svn/copy/path d:/{folderpath} 

где путь к папке должен быть извлечен из вышеуказанного измененного списка, например:

xcopy "C:/LocalSVN/temp1/temp2/temp3/temfile.txt" "d:/temp1/temp2/temp3/"

Мне нужно в моем командном файле извлечь только путь к папке и удалить имя файла. Каков наилучший способ сделать это в командном файле?

Есть ли другой способ достичь того, что я пытаюсь сделать?

Ответы [ 2 ]

2 голосов
/ 05 октября 2011

Это почти так же, как в Как получить часть пути к каталогу в командном файле

Ключ заключается в использовании функции% ~ dp, и это работает толькос параметрами (не переменными) вы можете использовать цикл FOR или подпрограмму для перемещения вашей переменной в параметр.

@echo off
set "testString=/temp1/temp2/temp3/temfile.txt"

call :GetPath returnVal "%testString%"
echo %returnVal%
exit /b

:GetPath
set "%1=%~dp2"
exit /b
0 голосов
/ 06 октября 2011
@echo off
setlocal
SET SUBDIR=%~dp0
call :parentfolder %SUBDIR:~0,-1% 
endlocal
goto :eof

:parentfolder
echo %~dp1
goto :eof
...