2015-11-27 3 views
0

Мне нужно удалить подстроку после *. с помощью пакетного файлаРазделить строку специальными символами '*' в пакетном файле

Example : 
The value of string is : TEST_SINISTRE*.csv 

rem My code : 
SET mystring="TEST_SINISTRE*.csv" 

rem Do the split 
SET ext_test=%mystring:*.="& rem %" 
SET ext_test=%ext_test% 

rem what i get 
echo %ext_test% ===> "& rem csv" 

rem What i want to see 
===> TEST_SINISTRE 

Можете ли вы помочь мне :-)

ответ

1

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

rem this is the original string containing one `*.`: 
set "STRING=TEST_SINISTRE*.csv" 

rem now get everything after `*.`: 
rem (if `*` is the first character in substring substitution, it means everything up to 
rem and including the search string is to be replaced, by nothing here in this case) 
set "SUBSTR=%STRING:**.=%" 
rem get everything before `*.`, including the `*`: 
setlocal EnableDelayedExpansion 
set "SUBSTL=!STRING:.%SUBSTR%=!" 
rem truncate the `*` from the string: 
endlocal & set "SUBSTL=%SUBSTL:~,-1%" 

Поскольку используется синтаксис подстановки для расширения переменных, это делается нечувствительным к регистру.

Чтобы сделать его более безопасным, вы можете добавить что-то, что, скорее всего, никогда не произойдет с вашей исходной строкой временно и удалить его впоследствии. Для достижения этой цели, замените set командную строку между блоком в setlocal/endlocal со следующим (с помощью приложения ### здесь, например):

set "STRING=!STRING!###" 
set "SUBSTL=!STRING:.%SUBSTR%###=!" 
+0

Большого спасибо :-) –

0

* является подстановочным в пакетной подстановке переменной подстроки. Когда вы делаете *.=something во встроенной замене, вы действительно говорите «замените все до и включая точку». Вы должны использовать цикл for /F, чтобы вы могли указать звездочку в качестве разделителя.

set "str=TEST_SINISTRE*.csv" 
for /f "tokens=1* delims=*" %%I in ("%str%") do set "ext_test=%%I%%J" 

echo %ext_test% 

Я не уверен, что ваша конечная цель есть, но вот hacksy возможная альтернатива. Фактически вы можете создать файл TEST_SINISTRE.csv, а затем зафиксировать имя файла в переменной в качестве подстановочного соответствия.

set "str=TEST_SINISTRE*.csv" 
type NUL > TEST_SINSTRE.CSV 

for %%I in (%str%) do set "ext_test=%%I" 

echo %ext_test% 

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

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