Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами

Ответить
Настройки темы
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами

Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Всем привет.
Долго пытаюсь сам решить задачу но не получается, поиск в интернете тоже результата не дал...
Прошу помощи у знающих людей.
Нужно написать скрипт сканирующий директорию на наличие файлов определенного расширения. После определения наличия файлов с нужным расширением, вывести их список с присвоением каждому найденному файлу порядкового номера.
Объясню зачем и как это в планах должно работать.
Скрипт при запуске ищет в директории файлы по расширению(в моём случае *.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

 

Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


megaloman, никак не пойму где переменная пути?
%FName% содержит имя выбранного файла, а в какой переменной находится путь к этому файлу не разберусь никак...

Отправлено: 23:20, 28-12-2020 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить PM | Цитировать


Alex S, нет его. Путь потерян - по вашему требованию. Можно, наверное, заново на это имя сделать dir и восстановить путь к файлу, но лучше вернуть файлу путь.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 23:26, 28-12-2020 | #32


Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
но лучше вернуть файлу путь »
Чтож, если все настолько заморочено буду использовать с отображением путей... Спасибо большое еще раз.

Отправлено: 23:32, 28-12-2020 | #33


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить 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


Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Последний вариант скрипта отработал отлично. Собственно и выполняет всё как и хотелось. Вопрос решён.
megaloman, ещё раз респектище и большое спасибо!!!

Отправлено: 00:44, 29-12-2020 | #35


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата Alex S:
Зачем? … Задача этого скрипта состоит в автоматизации некоторых действий. Из-за того что имена каталогов искомых файлов иногда разнятся, приходится постоянно открывать скрипт и править переменные с путями. »
Затем, что там может быть свой макроязык , в нём — меню (и прокрутка этого меню), например:
Скрытый текст
Код: Выделить весь код
local function LoadFile(FindData, FullPath)
	Files[#Files + 1] = {text = FindData.FileName}
end

Properties = {Title = 'Choose file:'}
Files = {}

far.RecursiveSearch([[C:\Мои проекты]], '*.vbs', LoadFile, far.Flags.FRS_RECUR)

Item, Position = far.Menu(Properties, Files)
far.Message(Item.text)

Отправлено: 05:04, 29-12-2020 | #36


Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
CHOICE /C %Spis% /N /M "Выберите номер файла, 0(нуль)-Завершить командный файл" »
результаты тестов показывают, что такая конструкция не очень удобна. При выборе происходит мгновенный переход к действию.
Нельзя-ли здесь реализовать вариант типа:
Скрытый текст
Код: Выделить весь код
:choice
echo --------------------------------------------------------------------------------
echo.
set /p "c=Ваш выбор: "
if "%C%"=="0" goto Exit
if "%C%"=="2" set ...
if "%C%"=="1" set ...

Или как в самом первом примере. Такой вариант ожидает подтверждения выбора нажатием Enter. Сам пытаюсь прикрутить нечто подобное и никак...

Последний раз редактировалось Alex S, 29-12-2020 в 13:22.


Отправлено: 13:15, 29-12-2020 | #37


Ветеран


Contributor


Сообщения: 2728
Благодарности: 1697

Профиль | Отправить 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


Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


СПАСИБО БОЛЬШОЕ! Теперь всё бесподобно!

Отправлено: 16:37, 29-12-2020 | #39


Аватара для Alex S

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я извиняюсь за назойливость, что изменить в скрипте, чтобы запретить ввод символов?
При запуске и выборе номера из списка случайно (действительно случайно ) ввёл какой-то символ вместо цифры(+,-,* - даже не знаю).
Получил "Непредвиденное появление (и символ)". Стал проверять... Выяснилось, если при первом запуске ввести например звёздочку - получаем ошибку и выход, а вот если сначала ввести к примеру 5 из 4-х возможных, получаем предупреждение из скрипта и на второй круг.
Так вот, странность, если на втором круге ввести ту же звездочку - получаем уже предупреждение из скрипта и на следующий круг.
Навело на мысль, что может нужно поменять какие-нибудь строки местами ? Ведь символы скрипт не принимает на последующих кругах, а при первом вводе не ожидает их(может проверка на символы идет позже, после проверки цифр ).

Отправлено: 23:46, 29-12-2020 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход