|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Получить список файлов |
|
|
CMD/BAT - [решено] Получить список файлов
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать Всем добрый день.
Уважаемые форумчане, не поможете ли вы в написании небольшого скриптика на .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 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Давайте потренируемся:
|
Отправлено: 15:02, 06-06-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Iska,
1. Переменная содержит название файла. Этот файл будет использоваться в строке запуска. Аля "start prog.exe -%my_file%" 2. Больше 1000 вряд ли будет, но больше 100 запросто. А что делать? Так же выводить их в консоль. Так как имена будут в алфавитном порядке, то найти нужный даже при 500 будет не проблемой. 3. Нет. Давай те немного раскрою карты. Есть код: For /f "tokens=1-3 delims=/." %%a in ('date /t') do (set mydate=%%a-%%b-%%c) For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a-%%b) set day=%mydate:~0,2% set month=%mydate:~3,2% set year=%mydate:~6,4% set record=%year%-%month%-%day%_%mytime% Как можно понять, сортировка будет такая: год-месяц-день-время, а значит, при алфавитной сортировке старые файлы будут верху, а новые - снизу. В общем сколько бы их не было, там сложно будет потеряться. Как я говорил ранее, задача состоит в том, чтобы каждому файлу в папке присвоить номер, при выборе которого создавалась переменная, значение которой было бы названием этого самого файла. |
Последний раз редактировалось UnrealMalcolm, 06-06-2020 в 16:10. Отправлено: 16:00, 06-06-2020 | #3 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать UnrealMalcolm,
Цитата UnrealMalcolm:
@Echo Off Cls For /f "tokens=2 delims=:" %%i in ('chcp') do (Set "sPrevCP=%%i" &>nul Chcp 1251) For /f "usebackq delims=" %%i in ( `@"mshta.exe" "about:<FORM><INPUT type='file' name='qq'></FORM><script>document.forms[0].elements[0].click();var F=document.forms[0].elements[0].value;try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(F)};catch (e){};close();</script>"` ) Do Set "sFileName=%%i" >nul Chcp %sPrevCP% if Defined sFileName (Echo Выбран файл: "%sFileName%") Else (Echo Файл не был выбран) Pause Exit /B 0 Цитата:
|
||
------- Отправлено: 16:19, 06-06-2020 | #4 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать megaloman, в целом, решение не плохое! Спасибо!
Правда не могли бы вы ещё мне помочь, как сделать, чтоб окно выбора файла открывалось в определенной директории? И как сделать, чтоб переменная имела не путь до файла, а только его название? Хотя конечно решение без mshta.exe тоже было бы не плохо. Всё же хочется задействовать минимум программ. |
|
Последний раз редактировалось UnrealMalcolm, 06-06-2020 в 17:36. Отправлено: 17:00, 06-06-2020 | #5 |
Ветеран Сообщения: 2708
|
Профиль | Отправить PM | Цитировать Цитата UnrealMalcolm:
Цитата UnrealMalcolm:
@Echo Off Cls For /f "tokens=2 delims=:" %%i in ('chcp') do (Set "sPrevCP=%%i" &>nul Chcp 1251) For /f "usebackq delims=" %%i in ( `@"mshta.exe" "about:<FORM><INPUT type='file' name='qq'></FORM><script>document.forms[0].elements[0].click();var F=document.forms[0].elements[0].value;try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(F)};catch (e){};close();</script>"` ) Do Set "FileName=%%~nxi" &Set "PathFileName=%%~dpi" >nul Chcp %sPrevCP% if Defined FileName (Echo Выбран файл: "%FileName%" "%PathFileName%") Else (Echo Файл не был выбран) Pause Exit /B 0 |
||
------- Отправлено: 17:52, 06-06-2020 | #6 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 18:35, 06-06-2020 | #7 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать В общем я своего добился. Правда получился какой-то говно код, но он работает. Единственный косяк - долго работает цикл. В целом за секунд 10 он покажет ~500 файлов. Но всё же хотелось бы что это было моментально.
Сам код получился таким: @Echo Off set file=11122.txt dir /b /a-d "C:\Users\Admin\Desktop\ttt\*" > %file% for /f "usebackq" %%S in (`find /c /v ""^<"%file%"`) do (set /a last_number=%%S) set num=1 :start_add_pref for /f "tokens=*" %%i in ('more +%num% "%file%"') do (echo %num% - %%i&goto next) :next set /a num=%num%+1 if %num%==%last_number% (goto:end_add_pref) else (goto:start_add_pref) :end_add_pref set /p file_select="-> " for /f "tokens=*" %%i in ('more +%file_select% "%file%"') do (set my_file=%%i&goto final) :final del "%file%" 2>NUL echo my file is %my_file% pause |
Отправлено: 00:11, 07-06-2020 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата UnrealMalcolm:
Скрытый текст
@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=C:\Users\Admin\Desktop\ttt
>nul 2>&1 pushd "%sSourceFolder%" && (
set /a iCount = 0
echo ---------------------------------------------
for /f "usebackq delims=" %%i in (`2^>nul dir /b /a:-d "*.*"`) do (
set /a iCount += 1
set sCount= !iCount!
set "aChoice!iCount!=%%~i"
echo !sCount:~-6!. %%~i
)
echo ---------------------------------------------
set /p sChoice=Enter number of file:
echo.
popd
) || (
echo Can't find folder [%sSourceFolder%].
exit /b 1
)
if defined aChoice%sChoice% echo [!aChoice%sChoice%!]
endlocal
exit /b 0
Если без выравнивания — можно и короче. |
|
Отправлено: 03:40, 07-06-2020 | #9 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Iska, супер! Прям что нужно, спасибо! Правда до последнего хотел избегать setlocal, но что поделать...
|
Отправлено: 11:05, 07-06-2020 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - 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 |
|