Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - CMD - читаю из файла, если первый символ строки =*, то вывести на экран строку

Ответить
Настройки темы
CMD/BAT - CMD - читаю из файла, если первый символ строки =*, то вывести на экран строку

Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Читаю из текстового файла строки
проверяю каждую строку, если одна из них начинается на символ *, то вывожу эту строку на экран и т.д.

вот кусок моих страданий, но он не работает:

For /F "usebackq tokens=* delims=" %%i In ("list.txt") Do (
set d=%i:~0,1%
if %d%== * @echo STROKA= %%i %d%
)



если просто ввести с клавы в переменную, то
set d=%i:~0,1%
if %d%== * @echo STROKA= %%i %d%

код срабатывает

Как бы это организовать правильно ?

Отправлено: 20:54, 06-02-2016

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата jester7:
Как бы это организовать правильно ? »
Вот так:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in ("list.txt") do (
	set sVar=%%i
	if "!sVar:~0,1!" equ "*" echo %%i
)

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:17, 06-02-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, работает)))
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%i in ("list.txt") do (
	set s=%%i
	if "!s:~0,1!" =="\" echo %%i
)



pause
А можно вопросы ламерские?
я уже три дня пытаюсь разобраться в этом старом программировании. (вобще-то я программирую на делфи и прочем)
подскажите, как понят этот язык ?
почему ставятся проценты, а иногда восклицательные знаки ?
= и == я понял логику
почему иногда два процента перед переменной, а иногда окружают переменную с краев?
почему иногда значение текстовой переменной без двойных кавычек, а иногда как у вас с кавычками ?
почему !s:~0,1! - в кавычках ?
почему echo - без собачки спереди ? (кажись понял, вывод на экран убран вначале кода... ЭХО ОФФ)
помогите разобраться...

Отправлено: 21:40, 06-02-2016 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата jester7:
почему ставятся проценты, а иногда восклицательные знаки ? »
И то, и другое означает раскрытие указанной переменной окружения. Разница в том, что «%…%» раскрывает переменную окружения сразу, в момент разбора команды, а «!…!» — в момент исполнения. В первую очередь это сказывается на операторных скобках — поскольку операторные скобки воспринимаются интерпретатором команд именно как одна единая команда. Например, в Вашем случае:
Цитата jester7:
Код: Выделить весь код
For /F "usebackq tokens=* delims=" %%i In ("list.txt") Do (
set d=%i:~0,1%
if %d%== * @echo STROKA= %%i %d%
)
»
«%d%» раскрывается в момент интерпретации команды «for /f» и всё условие выглядит как:
Код: Выделить весь код
if == * @echo STROKA= %%i
поскольку в этот момент переменная окружения «d» ещё не существует. Именно для этого вводится понятие отложенного раскрытия переменных окружения, активизируемое командой «setlocal enabledelayedexpansion», а сама переменная окружения для этого обрамляется не символами «%», а «!».

Цитата jester7:
почему иногда два процента перед переменной, »
Это специальные переменные цикла «for». Они не являются переменными окружения и в отличие от них — регистрозависимы. На самом деле символ процента один — просто внутри пакетных файлов символ процента при них должен удваиваться, отсюда и два символа «%» внутри пакетных файлов. А в командной строке будет один символ.

Цитата jester7:
а иногда окружают переменную с краев? »
Это обычные переменные окружения. Вы можете их увидеть по команде «set».

Цитата jester7:
почему иногда значение текстовой переменной без двойных кавычек, а иногда как у вас с кавычками ? почему !s:~0,1! - в кавычках ?»
В пакетных файлах все переменные окружения — строка. Никакими символами строка не выделяется, в том числе и не обрамляется кавычками. В ряде случаев содержимое переменной окружения/переменной цикла может интерпретироваться как число.

В подобном случае:
Цитата Iska:
Код: Выделить весь код
if "!sVar:~0,1!" equ "*" echo %%i
»
кавычки обычно используются на случай отсутствия переменной окружения (когда она раскрывается в пустую строку), дабы условие оставалось корректным с точки зрения синтаксиса. Кавычки могут быть заменены, например, на «[» и «]» и т.п.

Цитата jester7:
почему echo - без собачки спереди ? (кажись понял, вывод на экран убран вначале кода... ЭХО ОФФ) »
Именно так.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:58, 06-02-2016 | #4


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


А не проще найти эти строки?
Код: Выделить весь код
findstr "^\*.*" file.txt

Отправлено: 23:00, 06-02-2016 | #5


Новый участник


Сообщения: 7
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо за пояснение, правда я не все понял )))

блин))) даже С++ проще ))))

Отправлено: 23:10, 06-02-2016 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
А не проще найти эти строки? »
Конечно, проще .


Цитата jester7:
Спасибо за пояснение, правда я не все понял ))) »
Что именно не поняли? Приведённый коллегой Foreigner код делает то же самое, что ранее рассмотренный — выводит строки файла, начинающиеся на «*».

Отправлено: 23:41, 06-02-2016 | #7


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


cmd:
Код: Выделить весь код
findstr ^\* file
grep:
Код: Выделить весь код
grep '^*.*' file
gawk:
Код: Выделить весь код
gawk /^*/ file
sed:
Код: Выделить весь код
sed -n /^*/p file
powershell:
Код: Выделить весь код
Select-String ^\* file
или:
Код: Выделить весь код
gc file | ? {$_.StartsWith('*')}

Отправлено: 10:09, 07-02-2016 | #8


Ветеран


Сообщения: 1758
Благодарности: 966

Профиль | Цитировать


Цитата greg zakharov:
sed -n /^*/p file »
Если запускать в cmd.exe, то паттерн надо взять в двойные кавычки, иначе выведет все вхождения "*", включая в других частях строки. В PowerShell работает корректно.

Отправлено: 10:26, 07-02-2016 | #9


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата Foreigner:
Если запускать в cmd.exe, то паттерн надо взять в двойные кавычки, иначе выведет все вхождения "*", включая в других частях строки.
Какой-то странный у Вас sed, однако.

Отправлено: 10:49, 07-02-2016 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - CMD - читаю из файла, если первый символ строки =*, то вывести на экран строку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2007 - Не печатает первый символ на русском OGG Microsoft Office (Word, Excel, Outlook и т.д.) 2 21-06-2013 07:56
CMD/BAT - [решено] вывести сообщение на экран если файл весит больше 1 гига mars Скриптовые языки администрирования Windows 2 14-12-2009 11:03
CMD/BAT - [решено] Помогите запустить CMD-файл из CMD-файла с параметрами Oleg48 Скриптовые языки администрирования Windows 2 18-11-2009 11:08
CMD/BAT - [решено] вывод текстового файла на экран cmd idsp Скриптовые языки администрирования Windows 6 06-04-2009 07:18
Помогите пожалуйста не срабатывает команда из*cmd файла запускаемого из RanOnceEx.cmd vovchiku Автоматическая установка Windows 2000/XP/2003 6 25-09-2007 23:38




 
Переход