Не видя полный код и входной файл, это может быть одним из самых простых решений.
for /f "skip=24 tokens=2" %%a in (text.txt) do for %%b in (%%a) do set /a "b=%%b*2"
echo %b%
Эта опция удаляет запятой, который обрабатывается в качестве разделителя, используя второй for
петлю.
for /f "skip=24 tokens=2" %%a in (text.txt) do 2>nul set /a "b=2*%%a"
echo %b%
В этом случае порядок операндов был изменен, а выход ошибки (запятая все еще там) отбрасывается.
Если входные данные файла позволяет, возможно это может быть использовано
for /f "skip=24 tokens=2 delims=, " %%a in (text.txt) do set /a "b=%%b*2"
echo %b%
включая запятую в качестве разделителя в for /f
, то токенизатор отбросит его и запятая не будут включены в извлеченные данные.
Во всех случаях, когда echo
был перемещен из блока кода, который устанавливает переменную, нет необходимости в замедленном расширении.
Но, может быть, ни один из этих вариантов не может быть использован. Тогда ваш лучший вариант заключается в использовании запаздывающих
'открыла
setlocal enabledelayedexpansion
for /f "skip=24 tokens=2" %%a in (text.txt) do (
for %%b in (%%a) do set /a "b=%%b*2"
echo !b!
)
Или, с оригинальным подходом подстроки
setlocal enabledelayedexpansion
for /f "skip=24 tokens=2" %%a in (text.txt) do (
set "b=%%a"
rem Any of these could work
set "b=!b:~0,-1!"
set "b=!b:,=!"
set /a "b*=2"
echo !b!
)
Подсказка: 'помощь set'. – Joey
манипуляция строки не работает с переменными 'for' (' %% a'), только с «нормальными» переменными ('% var%'). Внутри блока 'for' вам придется использовать [замедленное расширение] (http://stackoverflow.com/a/30284028/2152082): '! var!' – Stephan
@Stephan, или 'call set';) – Joey