подстрока с помощью команды bat - PullRequest
7 голосов
/ 22 апреля 2010

У меня есть следующая вещь в моем файле bat.скажем

set path = c: \ temp \ test

так что в основном я хочу получить вывод, который бы дал мне результат как c: \ temp \

я не сделалнайти любой эквивалентный эквивалент в команде bat.

Спасибо.

Ответы [ 4 ]

5 голосов
/ 22 февраля 2011

Справочная информация:

>set fullname=c:\mypath\oldfile
>set changedname=%fullname:oldfile=newfile%
>echo %changedname%
c:\mypath\newfile

Применительно к задаче:

> set fullname=c:\mypath\oldfile
> set pathonly=%fullname:oldfile=%
> echo %pathonly%
c:\mypath\
3 голосов
/ 22 апреля 2010

Вопрос, который действительно заставляет меня хотеть 4DOS все еще существовал. Однако я нашел кое-что, что могло бы помочь в alt.msdos.batch.nt. Страница руководства для set, кажется, содержит большую часть той же информации. (команда help set)

set test=123456789

rem extract chars 0-5 from the variable test
set test=%test:~0,5%

echo %test%

(Примечание: проверено на Windows XP SP3)

1 голос
/ 22 апреля 2010

Зачем вам это нужно?

Ответ Йоханнеса является возможным решением, но, возможно, путь, на который вы ссылаетесь, передается (или может быть) в качестве аргумента сценария, в этом случае вы можете использовать следующий синтаксис:

REM Extracts the drive and path from argument %1
SET p=%~dp1

В качестве альтернативы вы можете объединить .. и путь к сценарию (%0):

REM Sets p to a sibling of the script directory
SET p=%~dp0..\test
0 голосов
/ 22 апреля 2010

Наивные подстроки имеют проблему, заключающуюся в том, что вы должны корректировать их каждый раз, когда изменяются ваши пути, и это не является общим решением проблемы.

Следующий пакетный файл дает представление о том, как можно выполнить усечение части пути:

@echo off
set foo=C:\Temp\Test
call :strip
echo %foo%
goto :eof

:strip
if not "%foo:~-1%"=="\" (
    set foo=%foo:~0,-1%
    goto :strip
)
goto :eof

Он жестко запрограммирован в одну переменную, но при необходимости легко исправляется.

Основной частью здесь является подпрограмма strip, которая зацикливает и обрезает последний символ строки, пока не будет найден обратный слеш. Это эффективно удаляет последнюю часть пути.

...