Компьютеры, программы, интернет => Программы и сети => Тема начата: Shaman от 17 Нояб., 2023, 00:24
Название: Как вывести имена файлов без расширения в переменную в bat файле windows?
Отправлено: Shaman от 17 Нояб., 2023, 00:24
Прошу помощи. Я не силён в bat файлах и мне нуже аналог вот этой команды под винду. Вывод команды идет в переменную libray_name и имеет вид:
Пока я сваял вот так, но поскольку пример частично из интернета я не полностью понимаю принцип его работы. Вот исходный вариант:
Вопросы поработе батника. 1. Что делает вот эта строка SetLocal EnableDelayedExpansion? Если её включить батник зависает на исполнении команды sed. До неё срабатывает хорошо. Всё что я понимаю из второй строчки это то что for это цикл и его результаты выводятся в echo 2. Что это и как оно работает в контексте %%a и %%~na? 3.do означает передачу выхода другой команте ? 4. Как циклу передаётся, что нужно удалить именно расширение .kicad_sym? В комаде basename это задаётся через параметр -s. 5. Почему для срабатывания команды в батнике нужно ставить двойной %, а напрямую в терминале одинарный? 6. Как сделать вывод в переменную а не в файл 7. Откуда берутся пробелы в выводе цикла? Поясняю команда basename имеет вот такой вывод:
А разбираемая команда: Буду благодарен за любую помощь.
P.S. Утилита sed отсутствует в Windows по умолчанию, но имеет порт. https://github.com/mbuilov/sed-windows Если понадобиться потестить прикрепил в аттачах.
Название: Re: Как вывести имена файлов без расширения в переменную в bat файле windows?
Отправлено: Slabovik от 17 Нояб., 2023, 15:30
В переменной в батниках вообще переводы строк непонятно как делать. Не выходят. В файл вывести
dir /b "путь/шаблон"> filelist.txt
в каждой строчке один файл, но есть засада - он с расширением.
Сейчас повозился со всякими set и %%x и понял, что ничего не понял. %%x никак не хочет передаваться в set, а идёт сразу на экран. Можно конечно уподобиться, сделав вот такое Если надо добавить кавычки, то получится так Если надо в одну строку, но эхо в цикле надо убрать, получится так Совершенно всрато... Вот вообще не въеду, как вставить запятую прямо здесь. Да, перенаправить в файл легко. Это пусть будет Lister.bat Вызываем
Lister.bat > Liblist.txt
результат будет в Liblist.txt
Для получения требуемого вида списка надо в получившемся файле сделать замену "" на "," SED поди справится за один проход, но в принципе, вроде тоже с батником поколодовать можно...
Да, setlocal надо использовать, потому что иначе, сделав SET чему либо, это "что либо" останется в командном процессоре до выключения системы. Что до delayedvariableexpansions, то я эту штуку не понял... Может здесь https://renenyffenegger.ch/notes/Windows/dirs/Windows/System32/cmd_exe/commands/setlocal/index https://ss64.com/nt/delayedexpansion.html ps. А вообще вот взял сразу строчку у тебя первую, и просто подставил dir /b