![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Получить список файлов |
|
CMD/BAT - [решено] Получить список файлов
|
Новый участник Сообщения: 8 |
Всем добрый день.
Уважаемые форумчане, не поможете ли вы в написании небольшого скриптика на .bat К сожалению я в нём почти ничего не понимаю ![]() Суть вот в чём. Скажем в папке C:/info/ есть следующие файлы: file1.format, file2.format, file3.format, file4.format и т.д. Нужно сначала получить список всех файлов и присвоить каждому номер. Выводится через echo должно так: 1 - file1.format 2 - file2.format 3 - file3.format 4 - file4.format Далее я нахожу нужный мне файл и вписываю его номер через set /p my_file="-> ". В итоге если я выбрал, скажем, file3.format, то я пишу "3" и переменная my_file становится file3.format. Только вот как всё это записать правильно, я не знаю. Уточню некоторые моменты: 1 - файлов может быть много 2 - могут отличатся количеством символов 3 - названия на английском языке 4 - в названиях имеются спец символы, а именно "_" и "-" 5 - начало файлов состоит из цифр (но это не точно, в будущем может и с букв начинаться ) В теории, я думаю должно работать всё как-то так: 1 - попадаем в папку 2 - переименовываем все файлы в алфавитном порядке(0-9 / a-z) из "file1" -> "1 - file1", "file2" -> "2 - file2" и т.д. 3 - выводим список всех файлов через echo 4 - задаём переменную my_file 5 - по всем файлам ищем начало как в my_file. 6 - запоминаем в другую переменную название файла 7 - переименовываем все обратно(убираем "1 -", "2 -" и т.д.) 8 - убираем n-ое кол-во символов(аля "1 -" 3 символа или "55 -" 4 символа) в переменной и получаем собственно то, что мне надо. Хотя я думаю можно всё проще сделать. Но, как я уже сказал, я сам это никак не сделаю ![]() |
|
Отправлено: 13:51, 06-06-2020 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать И ещё вопрос, как лучше использовать
? В начале .bat файла и без endlocal или перед началом данного скрипта с закрытием endlocal? .bat файл большой, там ещё много всего. Но нигде не используется setlocal и так же нет call функции. Ещё немного упростил ваш скрипт, не очень понял зачем создавались некоторые функции и строки. @echo off setlocal enableextensions enabledelayedexpansion set work_folder=%userprofile%\documents\Files set /a prefix = 0 echo --------------------------------------------- for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "%work_folder%\*.*"`) do ( set /a prefix += 1 set "choice!prefix!=%%~i" echo !prefix! - %%~i ) echo --------------------------------------------- set /p file_number=Enter file number: echo. if defined choice%file_number% set my_file=!choice%file_number%:~17,-4! echo %prefix% echo %my_file% endlocal |
Отправлено: 11:56, 07-06-2020 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата UnrealMalcolm:
|
|
Отправлено: 13:44, 07-06-2020 | #12 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать UnrealMalcolm, По идее мне не нравится идея
![]() @Echo Off Cls Set "BoxIn=E:\_Скопировано.wd\201309_Испания_Барселона" Set /A Quota=30 Set /A N=0 FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\" /b /A:-d`) DO ( Set /A N+=1 Call Set "Num=$$$$$$%%N%%" Call Set "%%Num:~-5%%=%%~nxf" ) Set /A iN=0 Set "MyName=" FOR /F "usebackq tokens=1* delims==" %%i IN (`2^>nul Set "$"`) DO Set "Num=%%i" &Call :OutName "MyName" "%%Num:$= %%" "%%~nxj" ||GoTo :End :End If Not "%MyName%"=="" (Echo "%MyName%") Else (Echo File not selected) Pause Exit /B :OutName Set /A iN+=1 Echo %~2 %~3 If %iN% EQU %Quota% Call :MyPause %1 %2 %3 ||Exit /B 1 If %iN% EQU %N% Call :MyPause %1 %2 %3 ||Exit /B 1 Exit /B 0 :MyPause Set /A iN=0, jN=0 Set /P jN=Type number 1-%N% of file, or Q-Quit, or Enter or any key to continue: If /I "%jN%"=="Q" Exit /B 2 Set /A jN=jN*1 If %jN% EQU 0 Exit /B 0 If 1 LEQ %jN% If %jN% LEQ %N% (GoTo :Rezult) Else (Echo Wrong number %jN% &GoTo :MyPause) :Rezult Set "jN=$$$$$$%jN%" Call Set "jN=%%%jN:~-5%%%" Call Set "%~1=%%jN%%" Exit /B 1 |
------- Отправлено: 14:48, 07-06-2020 | #13 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 15:10, 07-06-2020 | #14 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать UnrealMalcolm,
Цитата Iska:
@Echo Off Cls Set "BoxIn=E:\_Скопировано.wd\201309_Испания_Барселона" Set /A N=0 FOR /F "usebackq delims=" %%f IN (`2^>nul Dir "%BoxIn%\" /b /A:-D`) DO ( Set /A N+=1 Call Set "Num=$$$$$$%%N%%" Call Set "Num=%%Num:~-5%%" Call Echo %%Num:$= %% %%~nxf Call Set "%%Num%%=%%~nxf" ) Set /P jN=Type number 1-%N% of file: Set "Num=$$$$$$%jN%" Set "MyName=" If 1 LEQ %jN% If %jN% LEQ %N% Call Set "MyName=%%%Num:~-5%%%" If Not "%MyName%"=="" (Echo %Num:$= %="%MyName%") Else (Echo File %jN% not selected) Pause Exit /B |
|
------- Последний раз редактировалось megaloman, 07-06-2020 в 16:16. Отправлено: 16:10, 07-06-2020 | #15 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать megaloman, спасибо за предложенный вариант, но я уже остановился на варианте Iska.
Немного под себя переделал, добавил пару проверок на наличие папки, файлов, ввода корректного номера файла и т.д. Всё работает отлично. Наверное последнее чего я не понял, как обработать вывод "%%~i". for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "%my_folder%\*.*"`) do ( set /a prefix += 1 set "choice!prefix!=%%~i" echo !prefix! - %%~i ) EDIT: это было просто, вчера голова уже совсем не сображала. Всем спасибо кто помогал, на этом всё. /close |
Последний раз редактировалось UnrealMalcolm, 08-06-2020 в 13:04. Причина: Решил. Отправлено: 16:47, 07-06-2020 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:58, 07-06-2020 | #17 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - sfcscannow не может восстановить некоторые файлы - как получить список этих файлов? | bugme | Microsoft Windows 7 | 3 | 12-02-2019 08:01 | |
PHP - получить список файлов директории по фильтру | xNiSSaNx | Вебмастеру | 1 | 18-06-2013 06:34 | |
CMD/BAT - [решено] Получить список файлов с определенным расширением | 3StYleR | Скриптовые языки администрирования Windows | 1 | 18-07-2012 18:02 | |
Разное - [решено] Как получить список файлов находящихся в каталоге? | Kocuk | Microsoft Windows 2000/XP | 8 | 27-02-2012 23:25 | |
Удаленно получить список процессов | Dronec | Сетевые технологии | 1 | 25-09-2004 12:49 |
|