PDA

Показать полную графическую версию : Необходимо переключать значение маркера в цыкле


Seroga777
03-11-2012, 23:57
Мне нужно, что бы я при запросе вводил расширения файла, после чего производил с файлами этих форматов некоторые манипуляции.
Решил попробовать разбить задачу на некоторые подзадачи. В очередной из них столкнулся с проблемой:


@echo off
setlocal
for /L %%k in (1,1,3) do set rMark%%k=yes
for /L %%r in (1,1,3) do echo Введи расширение & set /p rash%%r=
for /L %%f in (1,1,3) do if -rash%%f EQU - (set rMark%%f=no)
echo %rMark1%
echo %rMark2%
echo %rMark3%
endlocal


Задаю маркерам rMark начальное значение yes, потом ввожу расширения. Если расширение не введено, нужно использовать лишь введенные, по этому при пустых строках хочу задать значение маркера rMark no, но оно не меняется... Помогите пожалуйста, BAT учу только неделю, еще совсем новичок
По идее проблема в выделенной строке, но что не правильно не знаю

Iska
04-11-2012, 00:38
Seroga777, непонятно, что Вы хотите получить.

Что есть маркеры? Зачем начальное значение? «Если не введено… использовать лишь введённые» — совершенно непонятно.

@echo off
setlocal enableextensions enabledelayedexpansion

set /p sExtensions=Enter extensions:

if defined sExtensions (
for %%i in (%sExtensions%) do echo %%i
)

endlocal
exit /b 0

E:\Песочница\0197>0003.cmd
Enter extensions:txt xls doc fmm
txt
xls
doc
fmm

Seroga777
04-11-2012, 00:59
Если при запросе ввести расширение, расширение не введено, то есть введена пустая строка, то с значением такой переменной работать нельзя, и маркер помечает ее как нерабочую. Так вот, не выходит поставить значение маркера "no"

Iska
04-11-2012, 02:03
Если при запросе … расширение не введено, то есть введена пустая строка, »
if defined sExtensions (…) »

gora
04-11-2012, 10:28
не выходит поставить значение маркера "no" »
Неправильное условие в третьем цикле:if -rash%%f EQU - (set rMark%%f=no) Оно ни когда не будет выполнено, т.к., rash%%f имя переменной, но не ее значение.
Вариант 1:for /L %%f in (1,1,3) do if not defined rash%%f set rMark%%f=no
Вариант 2:setlocal enabledelayedexpansion
...
for /L %%f in (1,1,3) do if "!rash%%f!"=="" set rMark%%f=no

Seroga777
07-11-2012, 23:25
Благодарю ребят, помогло!




© OSzone.net 2001-2012