2015-02-02 4 views
2

У меня есть строка, которая заканчивается \.. Все, что я хочу, это строка перед \.Разделить строку специальными символами '.'

Напр .: Моя Строка: D:\Work\WelCome\.
Выходная строка должна быть: D:\Work\WelCome

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

Я не очень новичок в разработке сценариев, но недостаточно экспертов.

ответ

2

Будучи путь файла/папки, то проще позволить ОС решить для вас, чем того, чтобы разбить строку (если требуется только левая часть)

for %%a in ("D:\Work\WelCome\.") do echo %%~fa 

В теоретическом случае, когда окончание точка может включать в фильме данные (но не слэша), это может быть преобразована в

rem The string with more data 
set "myString=D:\Work\WelCome\.blah" 

for %%a in ("%myString%[email protected]\..") do echo %%~fa 

услуг для покупателей @ гарантирует, что всегда есть услуги для покупателей информации (этак предыдущая точка окончания дела все равно будет работать), то for команда wi Посмотрите ссылку на файл, и нам просто нужно получить ссылку на родительскую папку.

Но Обратите внимание, что это только способ очистки ссылки на файл/папку, а не способ разделить строку на точный символ.

Для простого решения, чтобы разделить строку (или, чтобы быть более точными, удалите суффикс)

@echo off 
    setlocal enableextensions disabledelayedexpansion 

rem The string 
    set "myString=D:\Work\WelCome\.test" 

rem Do the split 
    set "myString=%myString:\.="&rem %" 
    set "myString=%myString%" 

rem Show data 
    echo %myString% 

Он заменяет расщепляющую подстроку команды конкатенации и комментарий начало (rem). Так

set "myString=D:\Work\WelCome\.test" 

превращается в

set "myString=D:\Work\WelCome"& rem test" 

Таким образом, в следующей строке, когда переменная присваивается сама, ненужную часть будет удалена (скрыта rem).

+1

Это не работает для таких случаев, как 'D: \ Work \ WelCome \ .blah', который сохранил бы бла. Хотя я полностью согласен с вами, OP специально сказал, что раскол, который, как я думал, может означать возможных персонажей по пути – Monacraft

+0

@Monacraft, вы, конечно, правы.Теперь в ответе говорится, что это не способ «разбить» строку. Спасибо –

+0

Спасибо большое @MCND. Это сработало для меня ... –

1

Я тестировал этот код и он работает:

setlocal enabledelayedexpansion 
set p=D:\Work\WelCome\. 
set v= 
:: v is the output 
for %%a in (%p:.= %) do (
    set "v=!v!.%%~a" 
    set q=%%~a 
    if "!q:~-1!"=="\" goto :end 
) 
:end 
set v=%v:~1% 
set v=%V:~0,-1% 
echo %v% 

Вот случаи, которые я использовал:

C:\> split.bat C:\1\2\3\. 
C:\1\2\3 

C:\> split.bat C:\1\2\3\.4\5\ 
C:\1\2\3 

C:\> split.bat C:\1\2\3\.4\5\.6\7\8 
C:\1\2\3 

C:\> split.bat C:\1\2.\ .3.\...4\.5 
C:\1\2.\ .3. 

C:\> split.bat C:\.1\2\3\4\5\6\7\8\9\ 
C: 

Что является то, что вы искали. Если вы хотите сделать больше с переменной, то просто echo просто ссылайтесь на %v%, следуя этой строке.

0
@ECHO OFF 
SETLOCAL 
SET "string=D:\Work\WelCome\." 

:: Classic solution if the string is in an environment variable 

ECHO %string:~0,-2% 

:: solution if the string is in a metavariable 

FOR %%z IN ("%string%") DO ECHO %%z becomes %%~dpnz 

GOTO :EOF 

который должен быть понятным.

Смежные вопросы