|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами |
|
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
|
![]() Пользователь Сообщения: 69 |
Всем привет.
Долго пытаюсь сам решить задачу но не получается, поиск в интернете тоже результата не дал... Прошу помощи у знающих людей. Нужно написать скрипт сканирующий директорию на наличие файлов определенного расширения. После определения наличия файлов с нужным расширением, вывести их список с присвоением каждому найденному файлу порядкового номера. Объясню зачем и как это в планах должно работать. Скрипт при запуске ищет в директории файлы по расширению(в моём случае *.wim), выводит список найденных файлов присвоив им порядковые номера. Затем используя ":choice" выбирается один из найденных для дальнейшей работы с ним... Найти не проблема, вывести список тоже, но как из списка сделать выбор одного не знаю как реализовать. Что есть сейчас:
@echo off
set BootFile=%SYSTEMDRIVE%\Work\Image\sources echo Проверка наличия файлов: echo. for /f "tokens=* delims=" %%a in ('dir /b /a-d "%BootFile%\Boot*.wim" ') do ( echo.%%~a ) pause |
|
Отправлено: 23:47, 07-02-2019 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать megaloman, никак не пойму где переменная пути?
%FName% содержит имя выбранного файла, а в какой переменной находится путь к этому файлу не разберусь никак... |
Отправлено: 23:20, 28-12-2020 | #31 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Alex S, нет его. Путь потерян - по вашему требованию. Можно, наверное, заново на это имя сделать dir и восстановить путь к файлу, но лучше вернуть файлу путь.
|
------- Отправлено: 23:26, 28-12-2020 | #32 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 23:32, 28-12-2020 | #33 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Имена файлов выводятся, в переменную записывается полный путь.
@Echo Off cls Set "BootFile=%SYSTEMDRIVE%\Work\Image\sources\*.wim *.esd" Call :FileName "%BootFile%" "FName" ||Exit /B 1 Echo %FName% pause GoTo :Eof :FileName SetLocal Set /A N=0 Set "Spis=" Pushd "%~dp1" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /S /a:-D %~nx1`) DO ( Set /A N+=1 Call :Symbol %%N%% "SS" Call Set "@%%SS%%=%%f" Call Set "Spis=%%Spis%%%%SS%%" ) If %N%==0 (Echo Files not found "%~1" &Pause &Exit /B 2) Echo ===== Найдено %N% файлов =====&Echo. FOR /F "usebackq tokens=1* delims=@=" %%f IN (`2^>nul Set "@"`) DO Echo %%f --^> %%~nxg Echo. Set /A NExit=%N%+1 Set "Spis=%Spis%0" CHOICE /C %Spis% /N /M "Выберите номер файла, 0(нуль)-Завершить командный файл" If %ErrorLevel%==%NExit% Exit /B 1 Call :Symbol %ErrorLevel% "SS" Call Set "@FName=%%@%SS%%%" Popd EndLocal& Set "%~2=%@FName%" Exit /B 0 :Symbol Set "S=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Call Set "%~2=%%S:~%1,1%%" Exit /B |
------- Последний раз редактировалось megaloman, 29-12-2020 в 00:42. Отправлено: 00:33, 29-12-2020 | #34 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Последний вариант скрипта отработал отлично. Собственно и выполняет всё как и хотелось. Вопрос решён.
![]() megaloman, ещё раз респектище и большое спасибо!!! |
Отправлено: 00:44, 29-12-2020 | #35 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
![]() Скрытый текст
|
|
Отправлено: 05:04, 29-12-2020 | #36 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Нельзя-ли здесь реализовать вариант типа: Скрытый текст
Или как в самом первом примере. Такой вариант ожидает подтверждения выбора нажатием Enter. Сам пытаюсь прикрутить нечто подобное и никак... |
|
Последний раз редактировалось Alex S, 29-12-2020 в 13:22. Отправлено: 13:15, 29-12-2020 | #37 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Выбрать номер файла и нажать Enter. Кол-во файлов произвольное.
@Echo Off Cls Set "BootFile=%SYSTEMDRIVE%\Work\Image\sources\*.wim *.esd" Call :FileName "%BootFile%" 30 "FName" ||Exit /B 1 Echo %FName% pause GoTo :Eof :FileName SetLocal Set /A N=0 Pushd "%~dp1" ||(Echo !!! Folder not found "%~dp1" &Pause &EndLocal &Exit /B 2) FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /S /O:-D /a:-D %~nx1`) DO Set /A N+=1 &Call Set "@%%N%%=%%f" Popd If %N%==0 (Echo !!! Files not found "%~1" &Pause &EndLocal &Exit /B 2) Set /A Iter=(%N%+%~2-1)/%~2 Set /A j=0 :Begin Set /A j+=1 Set /A N1=(%j%-1)*%~2+1 Set /A N2=%j%*%~2 If %N2% GTR %N% Set /A N2=%N% Set /A i=192837459 :Begin2 Cls Echo == Из %N% файлов показаны с %N1% по %N2% =====&Echo. FOR /L %%i IN (%N1%,1,%N2%) DO ( FOR /F "usebackq delims=" %%x IN (`Call Echo %%@%%i%%`) DO Echo %%i --^> %%~nxx ) Echo. Echo == Введите номер файла, Q-Завершить работу, Enter-продолжить просмотр Set "In=QQ" Set /P In= If /I "%In%"=="Q" EndLocal& Exit /B 1 If Not %j%==%Iter% If /I "%In%"=="QQ" GoTo :Begin If %j%==%Iter% If /I "%In%"=="QQ" Set /A j=0 &GoTo :Begin 2>nul Set /A i=%In% Set "@FName=" If "%In%"=="%i%" If %i% LEQ %N% Call Set "@FName=%%@%i%%%" If "%@FName%"=="" (Echo. &Echo !!! Номер файла "%In%" указан неверно &Pause &GoTo :Begin2) EndLocal& Set "%~3=%@FName%" &Exit /B 0 Exit /B 1 Call :FileName "%BootFile%" 30 "FName" ||Exit /B 1 30 число строк, отображаемых в порции прокрутки (если она потребуется исходя из количества файлов). |
------- Последний раз редактировалось megaloman, 30-12-2020 в 12:22. Отправлено: 15:20, 29-12-2020 | #38 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать СПАСИБО БОЛЬШОЕ! Теперь всё бесподобно!
![]() ![]() |
Отправлено: 16:37, 29-12-2020 | #39 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Я извиняюсь за назойливость, что изменить в скрипте, чтобы запретить ввод символов?
При запуске и выборе номера из списка случайно (действительно случайно ![]() Получил "Непредвиденное появление (и символ)". Стал проверять... Выяснилось, если при первом запуске ввести например звёздочку - получаем ошибку и выход, а вот если сначала ввести к примеру 5 из 4-х возможных, получаем предупреждение из скрипта и на второй круг. Так вот, странность, если на втором круге ввести ту же звездочку - получаем уже предупреждение из скрипта и на следующий круг. Навело на мысль, что может нужно поменять какие-нибудь строки местами ![]() ![]() |
Отправлено: 23:46, 29-12-2020 | #40 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
PowerShell - Поиск с созданием списка файлов с последующим их копированием. | rengaboy | Скриптовые языки администрирования Windows | 12 | 29-05-2018 15:35 | |
CMD/BAT - Поиск цифр в текстовом файле и последующий их поиск в названии файлов массива (лог.) | antares_80@vk | Скриптовые языки администрирования Windows | 10 | 25-10-2015 11:34 | |
CMD/BAT - [решено] Вывод списка файлов с указанным расширением | kelevara | Скриптовые языки администрирования Windows | 8 | 27-04-2013 03:59 | |
Любой язык - [решено] Вывод списка файлов и их размеров в байтах из заданной папки | Vadikan | Скриптовые языки администрирования Windows | 6 | 18-03-2011 23:16 | |
[решено] Вывод списка файлов с полными путями и размерами | Grenky | Программное обеспечение Windows | 16 | 03-07-2005 22:14 |
|