|
Компьютерный форум 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 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Alex S,
Если файлов 1<=N<=9
@Echo Off cls Set "BootFile=%SYSTEMDRIVE%\Work\Image\sources" Set "Mask=Boot*.wim" Call :FileName "%BootFile%\%Mask%" "FName" ||Exit /B 1 Echo %FName% pause GoTo :Eof :FileName SetLocal Set /A N=0 Set "Spis=" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /a:-D "%~1"`) DO Set /A N+=1 &(Call Set "@%%N%%=%%f" &Call Set "Spis=%%Spis%%%%N%%") If %N%==0 (Echo Files not found "%~1" &Pause &Exit /B 2) Echo ===== Найдено %N% файлов =====&Echo. FOR /F "usebackq tokens=* delims=@" %%f IN (`2^>nul Set "@"`) DO Echo %%f Echo. Set /A NExit=%N%+1 Set "Spis=%Spis%0" CHOICE /C %Spis% /N /M "Выберите номер файла, 0(нуль)-Завершить командный файл" If %ErrorLevel%==%NExit% Exit /B 1 Call Set "@FName=%%@%ErrorLevel%%%" EndLocal& Set "%~2=%@FName%" Exit /B 0 |
------- Последний раз редактировалось megaloman, 11-02-2019 в 20:52. Отправлено: 08:52, 08-02-2019 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
Сделать можно так: а это полный код с выбором конкретного файла
@echo off set "src=d:\111\Boot*.wim" :begin cls for /f "tokens=1* delims=:" %%a in ('dir /b/a-d "%src%"^|findstr /n "." ') do echo.%%~a - %%b set "var=" set "b= " echo. set /p "b=Введите число, для выбора файла: " set "b=%b:"=%" if "%b%"=="" (echo это не число&pause&goto begin) echo."%b%"|>nul findstr /rc:"[&|^%%]"&&(echo это не число&pause&goto begin) if "%b:~,2%"=="0x" ( echo.%b:~2%|>nul findstr /rc:"[^0-9a-f]"&&(echo это не число&pause&goto begin) ) else ( echo.%b%|>nul findstr /rc:"[^0-9]"&&(echo это не число&pause&goto begin) ) set /a c=b if %c% equ 0 if not %c% equ %b% (echo некорректное число&pause&goto begin) for /f "tokens=1* delims=:" %%a in ('dir /b/a-d "%src%"^|findstr /n "." ') do if %c% equ %%~a set "var=%%~b" echo. if not defined var (echo Не существует файла с таким номером&pause&goto begin) echo.Выбор сделан: "%var%" pause |
|
------- Отправлено: 09:38, 08-02-2019 | #3 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Alex S,
Если файлов 1<=N<=35
@Echo Off cls Set "BootFile=%SYSTEMDRIVE%\Work\Image\sources" Set "Mask=Boot*.wim" Call :FileName "%BootFile%\%Mask%" "FName" ||Exit /B 1 Echo %FName% pause GoTo :Eof :FileName SetLocal Set /A N=0 Set "Spis=" FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /a:-D "%~1"`) 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=* delims=@" %%f IN (`2^>nul Set "@"`) DO Echo %%f 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%%%" EndLocal& Set "%~2=%@FName%" Exit /B 0 :Symbol Set "S=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" Call Set "%~2=%%S:~%1,1%%" Exit /B |
------- Последний раз редактировалось megaloman, 11-02-2019 в 20:53. Отправлено: 10:40, 08-02-2019 | #4 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать megaloman, YuS_2 спасибо большое за помощь. Оба варианта прекрасно работают.
|
|
Последний раз редактировалось Alex S, 08-02-2019 в 12:39. Отправлено: 10:51, 08-02-2019 | #5 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
![]() Вопрос риторический, если что... |
|
------- Отправлено: 11:00, 08-02-2019 | #6 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать А вот появился новый вопрос. Копаюсь тут и не нахожу решения.
Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта? |
Отправлено: 12:38, 08-02-2019 | #7 |
Crazy Сообщения: 1218
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
Цыганочка с выходом :)
@echo off set "src=d:\111\Boot*.wim" :begin cls echo.---------------------------------------------------------------------- for /f "tokens=1* delims=:" %%a in ('dir /b/a-d "%src%"^|findstr /n "." ') do echo.%%~a - %%b echo.0 - Выход echo.---------------------------------------------------------------------- set "var=" set "b= " echo. set /p "b=Введите число, для выбора файла: " set "b=%b:"=%" if "%b%"=="" (echo это не число&pause&goto begin) echo."%b%"|>nul findstr /rc:"[&|^%%]"&&(echo это не число&pause&goto begin) if "%b:~,2%"=="0x" ( echo.%b:~2%|>nul findstr /rc:"[^0-9a-f]"&&(echo это не число&pause&goto begin) ) else ( echo.%b%|>nul findstr /rc:"[^0-9]"&&(echo это не число&pause&goto begin) ) set /a c=b if %c% equ 0 (if %c% neq %b% (echo некорректное число&pause&goto begin) else (echo.Выходим&pause&exit /b)) for /f "tokens=1* delims=:" %%a in ('dir /b/a-d "%src%"^|findstr /n "." ') do if %c% equ %%~a set "var=%%~b" echo. if not defined var (echo Не существует файла с таким номером&pause&goto begin) echo.Выбор сделан: "%var%" pause&exit /b |
|
------- Отправлено: 13:40, 08-02-2019 | #8 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать YuS_2 спасибо!
Вопросов больше нет, тема решена. |
Отправлено: 13:52, 08-02-2019 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата YuS_2:
|
|
Отправлено: 18:14, 08-02-2019 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|