Как заменить «cut» в командной строке Windows?

Как заменить «cut» в командной строке Windows?

У меня есть каталог с набором подпапок, соответствующих шаблону имени, например:

sub-123
sub-0815
sub-4711

Внутри этих папок у меня есть несколько файлов с тем же номером в названии, который был найден в названии папки. Например, папка sub-123 содержит файлы

input-123
output-123

Я хочу перебрать папку, изменить рабочий каталог на текущий и выполнить некоторую обработку с соответствующим набором файлов. В то время как я могу перебрать папки с

for /d %%d in (sub-*) do .

Мне нужна часть имени папки, которая соответствует звездочке, в примере выше "123". Как мне извлечь 123 из имени папки и построить команду типа

cd sub-123
copy input-123 output-123

внутри пакетного файла Windows-7? В среде Linux можно использовать команду cut или любое регулярное выражение. Но как мне войти в командную строку Windows?

решение1

Я нашел его сам. Команда set имеет расширенную подстановку переменных. Но ее нельзя использовать в forсамом теле. Необходимо начать новый контекст вызова bacth:

for /d %%d in (sub-*) do (
  set item=%%d
  pushd %%d
  call :build
  popd
)
goto :eof

:build
  set item=%item:sub-=%
  copy input-%item% output-%item%
:eof

«Элемент» не полностью создан из строки, сопоставившейся со звездочкой, но он эквивалентен.

решение2

Я также нашел прямой ответ. Он близок к сокращенной семантике.

Команда set также имеет синтаксис подстроки. Чтобы пропустить n символов, используйте %variable:~n%. Чтобы получить n символов, начиная со смещения k, используйте%variable:~k,n%

for /d %%d in (sub-*) do (
  set item=%%d
  set num=%item:~4%
  pushd %%d
  copy input-%num% output-%num%
  popd
)

Связанный контент