Вы можете использовать отрицательные смещения в оценке !var:~offset,len!
следующим образом:
set fspec=X32A-test.docx
echo !fspec:~-10!
echo !fspec:~0,-10!
Эта вторая строка выше дает вам -test.docx
, и вы можете просто сравнить это с вашими двумя желаемыми возможностями с помощью оператора if
(или двух).
Затем вы можете использовать третью строку, чтобы получить оставшуюся часть имени для создания каталога.
Следующий пример сценария показывает, как это можно сделать:
@setlocal enableextensions enabledelayedexpansion
@echo off
set fspec=X32A-test.docx
set bit1=!fspec:~-10!
set bit2=!fspec:~0,-10!
if .!bit1!.==.-test.docx. echo mkdir !bit2!
if .!bit1!.==.-test.pptx. echo mkdir !bit2!
endlocal
Я повторяю команду mkdir
, а не выполняю ее, поэтому вам нужно убрать echo
. Вам также нужно будет интегрировать операторы set
и if
в ваш цикл, но, исходя из того, что у вас есть, у вас не должно возникнуть никаких проблем с этим.
Если, как вы, кажется, указываете в комментарии, первые четыре символа являются ключом, а последние пять решают, создавать ли каталог, как в:
x32s-test.docx
a21w-production.pptx
xxxx-whatever_the_blazes_you_want.some_other_rubbish.docx
Тогда вас действительно интересуют только первые четыре и последние пять:
@setlocal enableextensions enabledelayedexpansion
@echo off
set fspec=a12b-whatever_the_blazes_you_want.some_other_rubbish.docx
set bit1=!fspec:~-5!
set bit2=!fspec:~0,4!
if .!bit1!.==..docx. echo mkdir !bit2!
if .!bit1!.==..pptx. echo mkdir !bit2!
endlocal
Проверяет правильные расширения и выходы:
mkdir a12b
как и ожидалось.