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

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

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

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

Всем привет.

Долго пытаюсь сам решить задачу но не получается, поиск в интернете тоже результата не дал...

Прошу помощи у знающих людей.

Нужно написать скрипт сканирующий директорию на наличие файлов определенного расширения. После определения наличия файлов с нужным расширением, вывести их список с присвоением каждому найденному файлу порядкового номера.

Объясню зачем и как это в планах должно работать.

Скрипт при запуске ищет в директории файлы по расширению(в моём случае *.wim), выводит список найденных файлов присвоив им порядковые номера. Затем используя ":choice" выбирается один из найденных для дальнейшей работы с ним...



Найти не проблема, вывести список тоже, но как из списка сделать выбор одного не знаю как реализовать.





Что есть сейчас:

[spoiler]@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[/spoiler]
Аватара пользователя
megaloman

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

Сообщение megaloman »

Alex S,


Если файлов 1
[spoiler]Код:
[/spoiler]

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

@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
Аватара пользователя
alpap

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

Сообщение alpap »

Цитата Alex S:



Найти не проблема, вывести список тоже, но как из списка сделать выбор одного не знаю как реализовать.
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами




Надо понимать так, что проблема с нумерацией найденного?

Сделать можно так:



Код:

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

dir /b /a-d "%BootFile%\Boot*.wim"|findstr /n "."




а это полный код с выбором конкретного файла

[spoiler]Код:
[/spoiler]

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

@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
Аватара пользователя
Alex S

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

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

Iska спасибо за помощь.

У меня сработало так:



Код:

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

set src=""%BootFile%\*.wim","%BootFile%\*.esd""
и так
set src=""%BootFile%\*.wim" "%BootFile%\*.esd""
Аватара пользователя
Alex S

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

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

megaloman, никак не пойму где переменная пути?

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

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

Сообщение megaloman »

Alex S, Всегда можно подобрать данные, способные одурачить любую программу. Изображение

См. мой код, подправил.

Код:

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

..........
		If %N2% GTR %N% Set /A N2=%N%
		Set /A i=192837459
		:Begin2
..............
Аватара пользователя
YuS_2

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

Сообщение YuS_2 »

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

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

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

Сообщение megaloman »

Цитата Alex S:



Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта?
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами




Отчего же нельзя... можно.



Цыганочка с выходом :)

[spoiler]Код:
[/spoiler]

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

@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
Аватара пользователя
Alex S

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

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

megaloman, YuS_2 спасибо большое за помощь. Оба варианта прекрасно работают.
Ответить

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