|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как взять в цикл FOR имена изнутри самого исполняемого CMD |
|
|
CMD/BAT - Как взять в цикл FOR имена изнутри самого исполняемого CMD
|
Новый участник Сообщения: 42 |
Здравия всем!
Уважаемые знатоки, требуется ваша помощь! Есть стандартный цикл, который берёт из внешнего файла имена и записывает их в другой файл! Пока этих файлов была пара, было терпимо, а теперь россыпь из десятка файлов начинает раздражать! ![]() Возможно ли сделать так, чтобы цикл брал имена из списка внутри самого исполняемого CMD ? Например, цикл обращается к некоему списку имён, который прячется в конце файла после EXIT и дальше записывает их во внешний файл..
Крайне благодарен, если есть решение! |
|
------- Отправлено: 07:07, 11-04-2025 |
Ветеран Сообщения: 4621
|
Профиль | Отправить PM | Цитировать Не совсем список, но, работает:
@echo off SetLocal EnableExtensions EnableDelayedExpansion SET "len=5" FOR /l %%i IN (1,1,%len%) DO ( call :NAME%%i ECHO. !name! >> файл.txt ) goto :EOF exit :NAME1 set "name=ИМЯ1" goto :EOF :NAME2 set "name=ИМЯ2" goto :EOF :NAME3 set "name=ИМЯ3" goto :EOF :NAME4 set "name=ИМЯ4" goto :EOF :NAME5 set "name=ИМЯ5" goto :EOF |
Отправлено: 07:33, 11-04-2025 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Такой вариант у меня уже был, очень трудно искать и редактировать список имён!
Что касается "временного файла" - тоже думал, но в крайнем случае.. проще, наверное, всю эту россыпь в архив собрать. Нужен, если есть, именно вариант с обращением к голому списку внутри самого CMD ? |
------- Отправлено: 07:49, 11-04-2025 | #3 |
Ветеран Сообщения: 4621
|
Профиль | Отправить PM | Цитировать Цитата alexys2004:
|
|
Отправлено: 08:48, 11-04-2025 | #4 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Не очень понял - в какой момент имена из раздела ":список имён" выносятся во временный файл?
и что делает операция: more +9 "%~0">"%file_with_name%" И ещё, я забыл сделать акцент в первом посте: таких списков будет НЕ один, т.к. внешних файлов уже почти десяток - вот от них я хочу избавиться и засунуть все списки в один исполняемый файл, но каждый отдельно, чтобы обрабатывался по мере необходимости! Собрать всё в один список - не вариант! надо, чтобы создавался в нужный момент отдельный файл с отдельным списком, взятым из конкретной области в исполняемом файле!
|
|
------- Последний раз редактировалось alexys2004, 11-04-2025 в 10:37. Отправлено: 10:28, 11-04-2025 | #5 |
Ветеран Сообщения: 4621
|
Профиль | Отправить PM | Цитировать Цитата alexys2004:
Цитата alexys2004:
Цитата alexys2004:
Цитата alexys2004:
|
||||
Отправлено: 10:40, 11-04-2025 | #6 |
Deadooshka Сообщения: 2559
|
Профиль | Отправить PM | Цитировать если список брать из внутренней переменной, то переносы нужно экранировать, оставляя пробелы между именами
иначе нужно читать сам этот скрипт извне и искать в нём текст этого списка либо построчным поиском, либо регулярным выражением. Тут уже надо определяться с языком скрипта или утилитами типа grep, которых нет в системе.
|
Отправлено: 12:52, 11-04-2025 | #7 |
fascinating rhythm Сообщения: 6678
|
Профиль | Отправить PM | Цитировать Powershell, запрос номера списка и вывод в файл.
$list1 = (" ИМЯ11 ИМЯ12 ИМЯ13 ") -split "`n" -match "\w" $list2 = (" ИМЯ21 ИМЯ22 ИМЯ23 ") -split "`n" -match "\w" $list3 = (" ИМЯ31 ИМЯ32 ИМЯ33 ") -split "`n" -match "\w" $l = read-host "Номер списка для вывода в файл" switch ($l) { 1 {$selectedList = $list1} 2 {$selectedList = $list2} 3 {$selectedList = $list3} } $selectedList |out-file "c:\temp\file.txt" -Encoding default |
------- Отправлено: 12:57, 11-04-2025 | #8 |
Ветеран Сообщения: 4621
|
Профиль | Отправить PM | Цитировать Цитата NickM:
@echo off SetLocal EnableExtensions EnableDelayedExpansion set /p "spisok=Ведите № списка:" for /f "tokens=* delims=" %%i in ('more "%~0" ^| findstr /n "begin_%spisok%"') do ( set "b=%%i" set "b=!b:::begin_%spisok%=!" ) for /f "tokens=* delims=" %%i in ('more +%b% "%~0"') do ( if "%%i" NEQ ":end_%spisok%" (echo. %%i) if "%%i" EQU ":end_%spisok%" goto :EOF ) :begin_1 ИМЯ11 ИМЯ12 ИМЯ13 :end_1 :begin_2 ИМЯ21 ИМЯ22 ИМЯ23 ИМЯ24 :end_2 :begin_3 ИМЯ31 ИМЯ32 ИМЯ33 :end_3 :begin_4 ИМЯ41 ИМЯ42 :end_4 :begin_5 ИМЯ51 ИМЯ52 ИМЯ53 ИМЯ54 ИМЯ55 :end_5 |
|
Последний раз редактировалось NickM, 11-04-2025 в 16:13. Отправлено: 13:36, 11-04-2025 | #9 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать @Echo Off &Cls Set "BoxOut=Z:\Box_Out" Set "@S1=File1.txt" Set "@S2=File2.txt" Set "@S3=File3.txt" Set "@S12345=File777.txt" Pushd "%BoxOut%"||(Echo Folder "%BoxOut%" not found &Pause &Exit /B 2) For /f "usebackq tokens=1* delims==" %%i IN (`Set "@S"`) Do >nul 2>&1 Del "%BoxOut%\%%j" For /f "usebackq tokens=1* delims=:" %%i IN (`FindStr /R /N /C:"^:@S" "%~dpnx0"`) Do Call :Out %%i %%j Pause Exit /B :Out Call Set "OutFile=%%%2%%" For /f "usebackq delims=" %%s IN (`More +%1 "%~dpnx0"`) Do ( Echo "%%s"|>nul Find ":@S"&&Exit /B >>"%BoxOut%\%OutFile%" Echo %%s ) Exit /B :@S1 C:\Program Files\1 skjhdk kslhjdljsl sl;djl;jlsjd.txt C:\Program Files\Advanced IP Scanner\2 sslm jds;ll; dalj;al lajl;akjsl;ka.png C:\Program Files (x86)\3 aklljalkjs akjslkajlasjl akljlakjljs.dbf :@S2 C:\Program Files\4 adSA SDASD DADADD.xls C:\Program Files (x86)\5 aSDFDSA CSAS SAASAS.doc :@S12345 8 adSA SDASD DADADD.xls 9 aSDFDSA CSAS SAASAS.doc :@S3 C:\Program Files (x86)\6 adSA SDASD DADADD.xls C:\Program Files\7 aSDFDSA CSAS SAASAS.doc 2. Перед списками обязательно должен быть Exit 3. Список должен именоваться @Sxxxx и начинаться :@Sxxxx 4. Для каждого списка должно указываться имя выходного файла. Для разных списков выходной файл может совпадать. В примере списков имена файлов абсолютно условны и могут быть как с путями, так и без - это уже тонкости, не указанные постановкой |
------- Последний раз редактировалось megaloman, 11-04-2025 в 17:10. Отправлено: 16:59, 11-04-2025 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Переопределить вывод внутри самого файла CMD | El Scorpio | Скриптовые языки администрирования Windows | 3 | 01-11-2022 22:07 | |
CMD/BAT - Запуск исполняемого файла (EXE) через скрипт CMD с вводом параметров | dm7203 | Скриптовые языки администрирования Windows | 1 | 01-11-2018 18:24 | |
CMD/BAT - [решено] как запустить cmd на удаленной машине чтобы cmd отобразилось у меня | Mickle | Скриптовые языки администрирования Windows | 13 | 21-09-2010 14:43 | |
Интерфейс - Как посмотреть версию исполняемого файла с произвольным расширением | Vic21 | Microsoft Windows 7 | 2 | 16-11-2009 15:12 | |
CMD/BAT - [решено]*.cmd: цикл перебирает значения и каждое значение проверяется | skeletor | Скриптовые языки администрирования Windows | 1 | 15-03-2007 16:11 |
|