Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Переменные CMD  (Прочитано 13399 раз)
0 Пользователей и 7 Гостей смотрят эту тему.
Bruce Wayne
Интересующийся

ru
Offline Offline

« : 26-02-2012 13:16 » 

Добрый день!

У меня вопрос по поводу переменных в cmd- и bat-скриптах: есть батник такой, который удаляет в определённых мной папках файлы, по соответствующим расширениям (он работает):

Код:
set i=del "%userprofile%\Stark industries\Developments\
set e=" /s /q
%i%*.strk%e%
%i%*.cmp%e%
%i%*.tech%e%
%i%*.temp%e%
%i%*.hjk%e%
set i=del "%programfiles%\Stark industries\
%i%*._mp%e%%i%*.strk%e%
%i%*.cmp%e%
%i%*.tech%e%
%i%*.temp%e%
%i%*.hjk%e%
set i=del "%allusersprofile%\Stark industries\Technologies
%i%*.strk%e%
%i%*.cmp%e%
%i%*.tech%e%
%i%*.temp%e%
%i%*.hjk%e%

Так вот, я хотел бы объединить все команды с удалением файлов по расширению в переменную, меняя при этом только переменные пути, но ничего не получается, видимо, я где-то допускаю ошибку, а какую - не знаю.

Код:
set i=del "%userprofile%\Stark industries\Developments\
set e=" /s /q
set k=(
%i%*.strk%e%
%i%*.cmp%e%
%i%*.tech%e%
%i%*.temp%e%
%i%*.hjk%e%
)
set i=del "%programfiles%\Stark industries\
%k%
set i=del "%allusersprofile%\Stark industries\Technologies
%k%

Подскажите, пожалуйста, кто знает, очень нужно! Заранее спасибо!
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 26-02-2012 13:34 » 

цикл for еще никто не отменил.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 26-02-2012 13:40 » 

Переменные среды не имеют никаких отношений. Это просто строки. Интерпретация идет в строке команды и она не рекурсивная.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Bruce Wayne
Интересующийся

ru
Offline Offline

« Ответ #3 : 26-02-2012 13:46 » 

Sla, спасибо, я это знаю, я забыл указать, что мне нужно уложиться в один файл.
RXL, это я тоже знаю, просто я привёл фрагмент батника - на самом деле он на несколько страниц, просто мне хочется сделать все операции покомпактнее. Но возможно ли такое вообще?
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 26-02-2012 14:02 » 

А кто сказал про файлы?
FOR /F "tokens=1-5" %G IN ("Изучай матчасть более тщательно") DO @echo %G %H %J
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 26-02-2012 14:31 » 

Хочу еще напомнить, что в батниках еще есть подпрограммы (см. help call).

Код: (DOS)
call :PROC
goto :EOF

:PROC
echo "1 2 3"
goto :EOF
« Последнее редактирование: 26-02-2012 14:33 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Bruce Wayne
Интересующийся

ru
Offline Offline

« Ответ #6 : 26-02-2012 15:58 » 

Sla, я что-то не совсем понял... Я сделал вот так:

Код:
set i=del "%userprofile%\Stark industries\Developments\
set e=" /s /q
FOR /F "tokens=1-5" %%k IN (
*.strk
*.cmp
*.tech
*.temp
) DO %i%%%k%%e
set i=del "%programfiles%\Stark industries\
%i%%%k%%e
set i=del "%allusersprofile%\Stark industries\Technologies
%i%%%k%%e

И опять не получается( Объясните, пожалуйста, поподробнее, если не сложно. Я читал справку и сделал всё по ней.
Записан
Bruce Wayne
Интересующийся

ru
Offline Offline

« Ответ #7 : 26-02-2012 16:00 » 

RXL, спасибо большое, я тоже посмотрю и попробую сделать.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 26-02-2012 17:53 » 

Разве оператор FOR можно расположить на нескольких строках?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Bruce Wayne
Интересующийся

ru
Offline Offline

« Ответ #9 : 26-02-2012 18:58 » 

А почему мой вариант не работает (самый первый)? Ваши варианты требуют изучения. Я, конечно, попытаюсь разобраться. Да, ещё я пробовал свой первый вариант заменить на следующее, полагая, что дело в абзацах:

Код:
set i=del "%userprofile%\Stark industries\Developments\
set e=" /s /q
set k=%i%*.strk%e% && %i%*.cmp%e% && %i%*.tech%e% && %i%*.temp%e% && %i%*.hjk%e%
%k%
set i=del "%programfiles%\Stark industries\
%k%
set i=del "%allusersprofile%\Stark industries\Technologies
%k%

Но не тут-то было! Он (батник) выполняет операции только для первого пути (Tony Stark\Stark industries\Developments), а остальные пути он игнорирует (делает поиск первого типа файлов *.strk в первом пути Tony Stark\Stark industries\Developments). То есть, получается, что батник не перезаписывает переменную... Что же тут не так? Как переправить именно этот вариант, если такое возможно?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 26-02-2012 19:24 » new

Очень плохая читаемость. Попробуй что ли переменные в верхнем регистре писать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Bruce Wayne
Интересующийся

ru
Offline Offline

« Ответ #11 : 26-02-2012 19:28 » 

RXL, нет, тут с этим всё в порядке: ему всё равно, что с верхним, что с нижним регистром - в обоих случаях не работает(
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 26-02-2012 20:07 » 

Очень плохая читаемость. Попробуй что ли переменные в верхнем регистре писать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 27-02-2012 04:03 » 

Что-то я не понял, а где разделители в списке k?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 27-02-2012 07:42 » 

delim по умолчанию - пробел
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines