Получение подстроки в цикле for в пакетном скрипте Windows - PullRequest
0 голосов
/ 09 октября 2018

Я не уверен, что я делаю здесь не так, но я пытаюсь проанализировать некоторые XML-файлы в моей папке и получить подстроку каждого имени файла.Вот что я получил в своем файле .bat:

for %%f in (*.xml) do (
    echo %%f
    echo %%f:~3,-4%%
)

Первый эхо-файл выводит имя файла просто отлично.Но второе эхо - это то, с чем у меня проблемы.Я получаю вывод, например, для NewABCDEFG.xml:

NewABCDEFG.xml
NewABCDEFG.xml:~3,-4%

Когда я должен получить:

NewABCDEFG.xml
ABCDEFG

Я не могу понять, что не так.Если я сам запускаю команду substring в командной строке, она работает нормально.Какие-либо предложения?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Сначала измените %%f на %%I, что облегчит чтение.

for %%I in (*.xml) do echo %%I & echo %%~nI

В этом случае нет необходимости в отложенном расширении.Однако я предпочитаю избегать использования блоков с несколькими строками командной строки:

for %%I in (*.xml) do call :DoIt %%I
exit /b
:DoIt
echo %1
echo %~n1
exit /b 0

Также избегайте возможной путаницы между заменяющей переменной и модификаторами, что позволяет использовать %%a .. %%z или %%A.. %%Z например.

0 голосов
/ 09 октября 2018

Исправлено с помощью следующего скрипта:

setlocal EnableDelayedExpansion
for %%f in (*.xml) do (
set filename=%%f
echo !filename:~7,-4!
)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...