Подстрока переменной с двумя процентами в файле .bat

421
NicoFC34

Я столкнулся с проблемой при попытке реализовать файл .bat и не нашел ответа. Я пытаюсь отобразить все имена папок без системного пути.

Я пробовал что-то подобное, но это не работает.

@echo off set back=%cd% for /d %%I in (C:\test\test*) do ( cd %%I 2>&1 >nul echo %%~nxI:~10,5 ) cd %back% 2>&1 >nul 

У вас есть решение, пожалуйста? :-)

1

3 ответа на вопрос

1
LotPings

Подстроки работают только с обычными переменными, а не с мета-переменными.
Скопируйте содержимое в переменную, и, поскольку это внутри (блока кода), вам нужно DelayedExpansion
Используя метод псевдо-вызова:

:: Q:\Test\2018\07\26\SU_1345000.cmd @echo off PushD . for /d %%I in (A:\test\test*) do ( Set "Dir=%%I" Call echo %%Dir:~10,5%% ) PopD 

В дереве, как это:

> tree  └───test ├───test1 ├───test2 └───test3 

это возвращает

> Q:\Test\2018\07\26\SU_1345000.cmd st1 st2 st3 

Возможно, ваше смещение было неверным.

0
chloesoe

Вы могли бы использовать dir /ad /b C:\test\test*

@echo off set back=%cd% for /d %%I in (C:\test\test*) do ( dir /ad /b %%I ) cd %back% 2>&1 >nul 

Этот скрипт будет печатать все имена папок в папках C:\test\test*

0
NicoFC34

Спасибо за ваши ответы. Вот решение, которое сработало для меня:

@echo off  setlocal EnableDelayedExpansion  for /d %%I in (C:\test\testV*) do (  set current_folder=%%I set test_version=!current_folder:~12,6! set test_version=!test_version:_=.!  echo !current_folder! echo !test_version! )