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

Ответить
 • Просмотры: 1
Аватара пользователя
Alex S

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

Сообщение Alex S »

А вот появился новый вопрос. Копаюсь тут и не нахожу решения.

Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта?
Вложения

[Расширение png было запрещено, вложение больше недоступно.]

Аватара пользователя
YuS_2

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

Сообщение YuS_2 »

YuS_2,
Цитата YuS_2:



а если их 350 или не дай бог 3500 ? Вопрос риторический, если что...
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами




Я ориентировался на Choice, так как в задании
Цитата Alex S:



Скрипт ... выводит список найденных файлов .... Затем используя ":choice" выбирается один ...
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами




Рискую впасть во флуд, но представить монитор с 350 (тем более 3500) строками мне трудновато. Поэтому, если без Choice


Для произвольного количества найденных файлов при ограничении количества файлов, отображаемых на экране за одну порцию (имитация скроллинга)

[spoiler]Здесь сделано по 20 штук, можно изменить, лишь бы на экран помещалось

Код:
[/spoiler]

Код: Выделить всё

@Echo Off
Cls
	Set "BootFile=%SYSTEMDRIVE%\Work\Image\sources"
	Set "Mask=Boot*.wim"
	Call :FileName "%BootFile%\%Mask%" 20 "FName" ||Exit /B 1
	Echo %FName%
pause
GoTo :Eof
:FileName
SetLocal
	Set /A N=0
       	FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /a:-D "%~1"`) DO Set /A N+=1 &Call Set "@%%N%%=%%f"
       	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

Выбор файла сделал в виде процедурищи[/i], чтобы не загромождать восприятие последующего кода скрипта, который собрался ваять пользователь



Клиент посчитал задачу решенной, так что наваял для собственного удовольствия Изображение
Аватара пользователя
Alex S

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

Сообщение Alex S »

Цитата megaloman:



Затем используя ":choice" выбирается один
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами




Так ведь :choice - не команда, а метка...




Цитата megaloman:



Рискую впасть во флуд, но представить монитор с 350 (тем более 3500) строками мне трудновато.
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами




Ну, мониторы-то сейчас всякие есть, можно и 350 упихать в один экран, но мы же не о DOS говорим, консоль же можно прокручивать:

Аватара пользователя
megaloman

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

Сообщение megaloman »

Появился ещё один вопрос, понимаю что не по теме, но он мелкий и не хочется из-за него тему создавать.

Не совсем я понял как происходит поиск информации и запись её в переменную. Слишком много информации из статей и справок в самом начале. Голова закипела...



После поиска файлов Boot.wim, по плану идет выбор одного из обнаруженных и вывод краткой информации о содержимом файла.

Вывод инфы не проблема, делается стандартными командами Dism.exe, но по мимо всего из общей информации о wim-файле нужно найти общее количество записей содержащих слово Index, точнее определить количество индексов и записать их в переменную.

Для чего это? После вывода краткой информации нужно ввести индекс одной из имеющихся редакций для дальнейшего её монтирования, а если введена неверная цифра индекса (условие сравнивается с переменной содержащей общее количество индексов), то ловим осиновый кол и идем на вторую попытку ввода...

Ниже, для ясности приведу краткий пример:



Пример

[spoiler]@echo off

MODE CON COLS=80 LINES=35

set "BootFile=%SYSTEMDRIVE%\Work\Image\sources\Boot.wim"



:wim_info

echo.============================ Содержимое wim-файла =============================

dism /English /LogLevel:1 /Get-WimInfo /WimFile:%BootFile%

echo.===============================================================================



set /p Indx=Введите индекс редакции для продолжения:

if %Indx% GTR 0 if %Indx% LEQ 24 goto :mount_wim

if %Indx% GTR 24 (echo Не существует индекса редакции с таким номером) & Pause>nul|(echo Нажмите любую клавишу чтобы повторить попытку ввода) & goto :wim_info



:mount_wim

echo Mount...

Pause

Exit[/spoiler]






Тут как общее число индексов указана цифра 24, но сколько их там на деле неизвестно. Вместо нее сравнение должно брать цифру(общее количество индексов) из переменной, в которой содержится точное число имеющихся. Если больше имеющихся, то смс-ка и на второй круг.



Пробовал так:


Пример поиска индексов:

[spoiler]for /f "tokens=2 delims=: " %%a in ('DISM /Get-WimInfo /WimFile:%BootFile% ^| findstr /i Index') do (set Image_Index=%%a)[/spoiler]




Но что-то видать не так делаю...
Аватара пользователя
YuS_2

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

Сообщение YuS_2 »

Такая конструкция вылетает...



Скрытый текст

[spoiler]set /p Indx=Введите индекс редакции для продолжения:

if %Indx% GTR 0 if %Indx% LEQ %Image_Index% goto :mount_wim

if %Indx% GTR %Image_Index% (echo Не существует индекса редакции с таким номером) & Pause>nul|(echo Нажмите любую клавишу чтобы повторить попытку ввода) & goto :wim_info[/spoiler]






Вопрос снят!!! Решил. Проблема была в команде поиска индекса, а именно, не указал язык поиска (/English)...

Сработало так:



Скрытый текст

[spoiler]for /f "tokens=2 delims=: " %%a in ('%DISM% /English /Get-WimInfo /WimFile:%BootFile% ^| findstr /i Index') do (set Image_Index=%%a)[/spoiler]
Аватара пользователя
Alex S

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

Сообщение Alex S »

Появился ещё один вопрос, понимаю что не по теме, но он мелкий и не хочется из-за него тему создавать.

Не совсем я понял как происходит поиск информации и запись её в переменную. Слишком много информации из статей и справок в самом начале. Голова закипела...



После поиска файлов Boot.wim, по плану идет выбор одного из обнаруженных и вывод краткой информации о содержимом файла.

Вывод инфы не проблема, делается стандартными командами Dism.exe, но по мимо всего из общей информации о wim-файле нужно найти общее количество записей содержащих слово Index, точнее определить количество индексов и записать их в переменную.

Для чего это? После вывода краткой информации нужно ввести индекс одной из имеющихся редакций для дальнейшего её монтирования, а если введена неверная цифра индекса (условие сравнивается с переменной содержащей общее количество индексов), то ловим осиновый кол и идем на вторую попытку ввода...

Ниже, для ясности приведу краткий пример:



Пример

[spoiler]@echo off

MODE CON COLS=80 LINES=35

set "BootFile=%SYSTEMDRIVE%\Work\Image\sources\Boot.wim"



:wim_info

echo.============================ Содержимое wim-файла =============================

dism /English /LogLevel:1 /Get-WimInfo /WimFile:%BootFile%

echo.===============================================================================



set /p Indx=Введите индекс редакции для продолжения:

if %Indx% GTR 0 if %Indx% LEQ 24 goto :mount_wim

if %Indx% GTR 24 (echo Не существует индекса редакции с таким номером) & Pause>nul|(echo Нажмите любую клавишу чтобы повторить попытку ввода) & goto :wim_info



:mount_wim

echo Mount...

Pause

Exit[/spoiler]






Тут как общее число индексов указана цифра 24, но сколько их там на деле неизвестно. Вместо нее сравнение должно брать цифру(общее количество индексов) из переменной, в которой содержится точное число имеющихся. Если больше имеющихся, то смс-ка и на второй круг.



Пробовал так:


Пример поиска индексов:

[spoiler]for /f "tokens=2 delims=: " %%a in ('DISM /Get-WimInfo /WimFile:%BootFile% ^| findstr /i Index') do (set Image_Index=%%a)[/spoiler]




Но что-то видать не так делаю...
Аватара пользователя
Alex S

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

Сообщение Alex S »

Такая конструкция вылетает...



Скрытый текст

[spoiler]set /p Indx=Введите индекс редакции для продолжения:

if %Indx% GTR 0 if %Indx% LEQ %Image_Index% goto :mount_wim

if %Indx% GTR %Image_Index% (echo Не существует индекса редакции с таким номером) & Pause>nul|(echo Нажмите любую клавишу чтобы повторить попытку ввода) & goto :wim_info[/spoiler]






Вопрос снят!!! Решил. Проблема была в команде поиска индекса, а именно, не указал язык поиска (/English)...

Сработало так:



Скрытый текст

[spoiler]for /f "tokens=2 delims=: " %%a in ('%DISM% /English /Get-WimInfo /WimFile:%BootFile% ^| findstr /i Index') do (set Image_Index=%%a)[/spoiler]
Аватара пользователя
Alex S

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

Сообщение Alex S »

YuS_2, разбираю пример с "Цыганочка с выходом Изображение".

Так сказать задумался о грядущих задачах и захотелось сделать универсальный скрипт.

Возник новый вопрос.

В папке поиска могут быть файлы *.wim, но могут быть и файлы *.esd. Пытался переделать скрипт для поиска и того и того(что найдёт, то и покажет списком), но выходит в итоге список файлами *.wim, а за ним следом, начиная с единицы новый список с файлами *.esd...

Можно ли осуществить поиск так, чтобы всё найденное было в одном списке?



Пробовал так:



Скрытый текст

[spoiler]@echo off

set BootFile=%SYSTEMDRIVE%\Work\Image\sources

set "src=%BootFile%\*.wim"

set "src2=%BootFile%\*.esd"



:begin

cls

echo Обнаруженные файлы:

echo.

echo.----------------------------------------------------------------------

for /f "tokens=1* delims=:" %%a in ('dir /b/a-d "%src%"^|findstr /n "." ') do echo.%%~a - %%b

for /f "tokens=1* delims=:" %%a in ('dir /b/a-d "%src2%"^|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[/spoiler]
Ответить

Вернуться в «Скриптовые языки администрирования Windows»