Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/114: Рейтинг темы: голосов - 114, средняя оценка - 4.92
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 876
Записей в блоге: 10
1

Символ переноса строки в переменной окружения

11.09.2012, 16:31. Показов 23077. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет.

Пишу bat-ник по заданию в институте. В принципе все получается, но хотелось бы улучшить код.

Подскажите, можно ли вставить в переменную окружения символ новой строки.

Мне нужно пробежаться по списку всех запущенных процессов и устроить им некую обработку. Список названий процессов могу получить
1) либо в переменной окружения - но тогда они разделены каким-то мною заданным символом, сейчас звездочкой - *,
2) либо в файле - тогда каждое название на своей строке, но работа с файлом меня не совсем устраивает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2012, 16:31
Ответы с готовыми решениями:

Символ переноса в Excel (Как заменить символ на перенос строки)
Решил подсобить всем кто будет гуглить: Как заменить символ на перенос строки в Excel (ALT+Enter)....

Распознавание строки, в которой разделителями является символ переноса строки
Всем привет. Такой вопрос, использую функцию strtok для распознавания строки, в которой...

Символ переноса строки в textarea
Замучался с заменой переноса строки в textarea на пробелы. Делаю так: $string = $_POST; ...

Символ переноса строки в ТекстБокс
Предположим я имею две переменные A$ = 'строка 1' и S$ = ' строка 2' и мне нужно разместить их...

7
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
15.09.2012, 22:45 2
Цитата Сообщение от GoldenId Посмотреть сообщение
1) либо в переменной окружения - но тогда они разделены каким-то мною заданным символом, сейчас звездочкой - *,
Разделяя их знаком равенства вместо звездочки, Вы можете пройтись по каждому имени процесса так:

1. Из файла proxy 2.ini
Bash
1
2
3
4
@Echo off
set Actual=c:\Users\Alex\proxy 2.ini
for /f "usebackq delims=" %%a in ("%Actual%") do for %%i in (%%a) Do Echo %%i
pause>nul
Из глобальной пользовательской переменной окружения Actual:
Bash
1
2
3
4
@Echo off
set Actual=c:\Users\Alex\proxy 2.ini
for %%i in (%Actual%) Do Echo %%i
pause>nul
Добавлено через 1 минуту
Цитата Сообщение от GoldenId Посмотреть сообщение
2) либо в файле - тогда каждое название на своей строке, но работа с файлом меня не совсем устраивает.
Bash
1
2
3
4
@Echo off
set Actual=c:\Users\Alex\proxy 2.ini
for /f "usebackq delims=" %%a in ("%Actual%") Do Echo %%a
pause>nul
1
142 / 143 / 64
Регистрация: 11.11.2010
Сообщений: 876
Записей в блоге: 10
16.09.2012, 13:35  [ТС] 3
Dragokas,
Цитата Сообщение от Dragokas Посмотреть сообщение
Из глобальной пользовательской переменной окружения Actual:
Bash
1
2
3
4
@Echo off
set Actual=c:\Users\Alex\proxy 2.ini
for %%i in (%Actual%) Do Echo %%i
pause>nul
Выдает
Код
c:\Users\Alex\proxy
2.ini
Цитата Сообщение от GoldenId Посмотреть сообщение
работа с файлом меня не совсем устраивает
0
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
21.09.2012, 20:58 4
Честно, не знаю как это сделать.

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

Пример нерационального, но полностью рабочего кода:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@Echo off
SetLocal EnableDelayedExpansion
 
::Тест - заносим список процессов, разделенных * в переменную
Set Proc=c:\test.exe*2*3*4 4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20*21*22*23*24*25
 
for /f "tokens=1-26 delims=*" %%a in ("%Proc%") do (
  set proc.1=%%a
  set proc.2=%%b
  set proc.3=%%c
  set proc.4=%%d
  set proc.5=%%e
  set proc.6=%%f
  set proc.7=%%g
  set proc.8=%%h
  set proc.9=%%i
  set proc.10=%%j
  set proc.11=%%k
  set proc.12=%%l
  set proc.13=%%m
  set proc.14=%%n
  set proc.15=%%o
  set proc.16=%%p
  set proc.17=%%q
  set proc.18=%%r
  set proc.19=%%s
  set proc.20=%%t
  set proc.21=%%u
  set proc.22=%%v
  set proc.23=%%w
  set proc.24=%%x
  set proc.25=%%y
  set proc.26=%%z
)
 
for /L %%a in (1,1,26) do (
  rem echo %proc.1%
  rem echo proc.%%a
  if defined proc.%%a (
    rem Устраиваем процессу процедуру обработки
    echo Работаем с процессом - !proc.%%a!
  )
) 
pause>nul
Надеюсь, максимум 26 процессов в переменной Вам хватит ...
0
612 / 92 / 14
Регистрация: 15.08.2012
Сообщений: 62
23.09.2012, 19:40 5
Лучший ответ Сообщение было отмечено как решение

Решение

Dragokas, я позволил себе пойти немного другим путем, чем Вы. В данном случае, длинна списка с процессами не ограничивается ничем, кроме самой максимальной длинны одиночной переменной, вместо 26 позиций у Вас.
Кроме того, сменён разделитель, причины описаны в комментариях скрипта.
Код
@Echo off
SetLocal EnableDelayedExpansion
 
:: Разделитель сменён мною на ; по следующим причинам - не содержится в именах файлов и путях,
:: не является спецсимволом, на который может некорректно отреагировать интерпретатор
::Тест - заносим список процессов, разделенных ; в переменную
Set Proc=c:\test.exe;2;3;4 4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25

:: Подготавливаем список для работы с циклом
:: Замена разделителя на внутренние кавычки
Set Proc=%Proc:;=" "%
:: Добавка внешних двойных кавычек
Set Proc="%Proc%"

:: Обрабатываем в цикле, пишем каждый процесс в свою переменную
:: Собственно, если запись процессов в переменную не нужна, то
:: можно работать с ними прямо тут и не плодить излишних сущностей
Set i=0
For %%A In (%Proc%) Do (Set /A i+=1&Set $Process_!i!==%%~A)

:: Работаем с записанными ранее процессами
For /F "tokens=2 delims==" %%A In ('Set $Process') Do (
	Echo Doing something with %%A...
)
Pause>nul
6
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
24.09.2012, 12:23 6
Anonymоus, еще раз спасибо, что откликнулись на просьбу и нашли для нас время.
0
Модератор
Эксперт JS
5231 / 2106 / 414
Регистрация: 06.01.2013
Сообщений: 4,835
02.01.2014, 19:35 7
Цитата Сообщение от GoldenId Посмотреть сообщение
либо в переменной окружения - но тогда они разделены каким-то мною заданным символом, сейчас звездочкой - *,
Осторожно! Сейчас будет некропостинг.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
setlocal enabledelayedexpansion
call :parse %Actual%
exit /b
:parse
set _cnt=0
set _tmp=%~1
:parse_1
for /f "usebackq tokens=1* delims=*" %%A IN ('%_tmp%') DO (
 set /a _cnt+=1
 set process.!_cnt!=%%~A
 set _tmp=%%~B
)
if defined _tmp goto parse_1
exit /b
1
Эксперт WindowsАвтор FAQ
18007 / 7708 / 892
Регистрация: 25.12.2011
Сообщений: 11,481
Записей в блоге: 16
02.01.2014, 20:09 8
Все правильно.
Этому способу как раз здесь место.
С НГ, некропостер !!!
1
02.01.2014, 20:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.01.2014, 20:09
Помогаю со студенческими работами здесь

Не работает символ переноса строки \n
Подскажите пожалуйста в чём может быть проблема? Вставляю символ переноса строки в строку которую...

Убрать символ переноса строки
Вообщем там много года я так расскажу в чем дело. Вобщем после 100 строк кода у меня в...

Не работает символ переноса строки
Подскажите, пожалуйста, как сделать перенос строки. Пробовала и \n, и \r, и все вместе - ничего не...

Не работает символ переноса строки \n
Добрый день! Есть проблема: получаю из формы строку методом POST, внутри строки есть символы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru