|
Компьютерный форум 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 | Цитировать |
Отправлено: 19:49, 10-02-2019 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Запятая не нужна.
|
Отправлено: 19:54, 10-02-2019 | #22 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Спасибо ещё раз за помощь.
|
Отправлено: 19:56, 10-02-2019 | #23 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Всем привет.
Возникла необходимость переделать скрипт для поиска файлов (*.wim *.esd) рекурсивно. Почитал справку, с рекурсивным поиском разобрался используя команду for с ключом /R: Список выводится с полными путями, тут и вся проблема. Теперь снова нужно переделать скрипт так, чтобы при поиске файлов выводился их список (только имена файлов с расширением) с присвоением каждому найденному файлу порядкового номера. Далее, после выбора файла из списка, его путь записать в переменную для дальнейшего использования... Если можно, то реализовать на базе этого, хотя не принципиально: Скрытый текст
@echo off set SrcFile=%SYSTEMDRIVE%\Work set src=""%SrcFile%\*.wim" "%SrcFile%\*.esd"" :begin cls echo Обнаруженные файлы: echo. echo.---------------------------------------------------------------------- :: Используя нижнюю заком-ю стоку нужно решить задачу... ::for /R "%SrcFile%" %%a in (*.wim *.esd) do echo.%%~a 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 (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 |
Отправлено: 02:12, 28-12-2020 | #24 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата Alex S:
проблема с очередными граблями, а именно: Цитата Alex S:
если предполагается делать список в отдельный файл, то ситуация немногим лучше: открыть, прокрутить, найти, запомнить номер, запустить bat, ввести номер - кошмар. Не пробовали подружиться с каким-нибудь файловым менеджером? |
||
Отправлено: 15:03, 28-12-2020 | #25 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать Цитата alpap:
Цитата alpap:
Ну, если это настолько заморочено, буду искать другой способ... Цитата alpap:
Спасибо за ответ! ![]() ![]() |
|||
Последний раз редактировалось Alex S, 28-12-2020 в 18:52. Причина: Добавка текста Отправлено: 18:45, 28-12-2020 | #26 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Произвольное число файлов
@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)
rem 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"
FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /S /O:-D /a:-D %~nx1`) DO Set /A N+=1 &Call Set "@%%N%%=%%~nxf"
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%
:Begin2
Cls
Echo == Из %N% файлов показаны с %N1% по %N2% =====&Echo.
FOR /L %%i IN (%N1%,1,%N2%) DO Call Echo %%i=%%@%%i%%
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
Если файлов 1<=N<=35
@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"
rem Call Set "@%%SS%%=%%f"
Call Set "@%%SS%%=%%~nxf"
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%%%"
Popd
EndLocal& Set "%~2=%@FName%"
Exit /B 0
:Symbol
Set "S=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Call Set "%~2=%%S:~%1,1%%"
Exit /B
|
------- Последний раз редактировалось megaloman, 28-12-2020 в 20:51. Отправлено: 19:46, 28-12-2020 | #27 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать megaloman, спасибо большое! То что нужно!
![]() А можно тут ка-то сделать так, чтобы отображались только имена файлов с расширением(скрыть путь). Это уже не столь важно конечно... |
Отправлено: 20:20, 28-12-2020 | #28 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Alex S, Исправил код. Вместо красной строки записал изменённую. Не понятно, как идентифицировать файл, если имя одно и то же, а путь разный, что выбирать?
|
------- Отправлено: 20:45, 28-12-2020 | #29 |
![]() Пользователь Сообщения: 69
|
Профиль | Отправить PM | Цитировать megaloman, теперь точно в точку. Большего и не надо.
Цитата megaloman:
Спасибо большое за помощь, респект и уважуха! ![]() |
|
Последний раз редактировалось Alex S, 28-12-2020 в 22:14. Отправлено: 20:54, 28-12-2020 | #30 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|