CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
-
Alex S
CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
Всем привет.
Долго пытаюсь сам решить задачу но не получается, поиск в интернете тоже результата не дал...
Прошу помощи у знающих людей.
Нужно написать скрипт сканирующий директорию на наличие файлов определенного расширения. После определения наличия файлов с нужным расширением, вывести их список с присвоением каждому найденному файлу порядкового номера.
Объясню зачем и как это в планах должно работать.
Скрипт при запуске ищет в директории файлы по расширению(в моём случае *.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]
Долго пытаюсь сам решить задачу но не получается, поиск в интернете тоже результата не дал...
Прошу помощи у знающих людей.
Нужно написать скрипт сканирующий директорию на наличие файлов определенного расширения. После определения наличия файлов с нужным расширением, вывести их список с присвоением каждому найденному файлу порядкового номера.
Объясню зачем и как это в планах должно работать.
Скрипт при запуске ищет в директории файлы по расширению(в моём случае *.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 - [решено] Поиск файлов в папке и вывод их списка под номерами
Alex S,
Если файлов 1
[spoiler]Код: [/spoiler]
Если файлов 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 - [решено] Поиск файлов в папке и вывод их списка под номерами
Цитата Alex S:
Найти не проблема, вывести список тоже, но как из списка сделать выбор одного не знаю как реализовать.
Надо понимать так, что проблема с нумерацией найденного?
Сделать можно так:
Код:
а это полный код с выбором конкретного файла
[spoiler]Код: [/spoiler]
Найти не проблема, вывести список тоже, но как из списка сделать выбор одного не знаю как реализовать.
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 - [решено] Поиск файлов в папке и вывод их списка под номерами
Iska спасибо за помощь.
У меня сработало так:
Код:
У меня сработало так:
Код:
Код: Выделить всё
set src=""%BootFile%\*.wim","%BootFile%\*.esd""
и так
set src=""%BootFile%\*.wim" "%BootFile%\*.esd""-
Alex S
Re: CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
megaloman, никак не пойму где переменная пути?
%FName% содержит имя выбранного файла, а в какой переменной находится путь к этому файлу не разберусь никак...
%FName% содержит имя выбранного файла, а в какой переменной находится путь к этому файлу не разберусь никак...
-
megaloman
Re: CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
Alex S, Всегда можно подобрать данные, способные одурачить любую программу. 
См. мой код, подправил.
Код:

См. мой код, подправил.
Код:
Код: Выделить всё
..........
If %N2% GTR %N% Set /A N2=%N%
Set /A i=192837459
:Begin2
..............-
YuS_2
Re: CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
А вот появился новый вопрос. Копаюсь тут и не нахожу решения.
Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта?
Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта?
-
megaloman
Re: CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
Цитата Alex S:
Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта?
Отчего же нельзя... можно.
Цыганочка с выходом
[spoiler]Код: [/spoiler]
Можно ли сделать чтобы последним пунктом, после поиска всегда был пункт выхода из скрипта?
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 - [решено] Поиск файлов в папке и вывод их списка под номерами
megaloman, YuS_2 спасибо большое за помощь. Оба варианта прекрасно работают.
-
YuS_2
Re: CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
Цитата YuS_2:
Код:
Кстати — логично!
Код:
Код: Выделить всё
…|findstr /n "."CMD/BAT - [решено] Поиск файлов в папке и вывод их списка под номерами
Кстати — логично!