С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823

Дополнить код создать список файлов

11.06.2015, 00:57. Показов 1884. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
В принципе вопрос к ComSpec, это его код в теме: 16.11.2014, 14:09 Найти папки по части имени и создать список находящихся в них файлов. Хотел узнать как искать в папках имя которых в кириллице, игрался с кодировками не помогло, не создает список файлов для такой папки
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
@echo on
>nul chcp 1251
md "%USERPROFILE%\Desktop\papka" 2>nul
@>"%USERPROFILE%\Desktop\papka\list.txt" (
for /f %%i in ('"wmic logicaldisk where name='C:'"') do @(
 for /f "delims=" %%j in ('"dir /ad/b/s "%%i\Новая" 2>nul"') do @(
  dir /a-d/b/s "%%j" 2>nul
  echo.
  )
 )
)
 pause
exit /b
И еще вопрос: как выполнить поиск файлов не всех, а по расширению, например, только .bat
Заранее благодарю за помощь!

Добавлено через 1 час 23 минуты
С поиском по расширению разобрался, это я уже что-то торможу маленько: dir /a-d/b/s "%%j\*.bat" 2>nul
но как папки в кириллице побороть?

Добавлено через 23 минуты
Разобрался и с кодировкой. В AkelPad у меня для создаваемых стоит 866 и когда убрал строчку >nul chcp 1251 создавал в 1251, надо было после этого типа обновиться или принудительно повторно заставить создавать док-т в 866. Сейчас все отлично работает в кодировке 866 и папки в кириллице находит и в списке кириллицу выдает.

Добавлено через 7 часов 34 минуты
А можно как-то отметить эту тему решенной, а то здесь некому поставить галочку лучший ответ или удалить. Спасибо заранее.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.06.2015, 00:57
Ответы с готовыми решениями:

Упорядочить список студентов по году рождения, и распечатать его в виде таблицы (дополнить код)
Вообщем вот задание: Составить список учебной группы, включающей 25 человек. Для каждого учащегося указать дату рождения, год поступления...

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

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

2
 Аватар для ComSpec
3462 / 2000 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
12.06.2015, 11:31
Лучший ответ Сообщение было отмечено alpap как решение

Решение

Цитата Сообщение от alpap Посмотреть сообщение
А можно как-то отметить эту тему решенной


alpap, здравствуйте! Думаю, что ещё рановато.

1. Если Вы ищете папку только на одном диске, то цикл для разбора вывода команды "WMIC LOGICALDISK" полностью излишен. Можно просто обойтись объявлением переменной со значением нужного диска:
Windows Batch file
set "drive=C:"
.
Но это, как говорится, мелочи.

2. Есть более серьёзные проблемы с применением данного кода в Ваших целях.

Цитата Сообщение от alpap Посмотреть сообщение
В принципе вопрос к ComSpec, это его код в теме: 16.11.2014, 14:09 Найти папки по части имени и создать список находящихся в них файлов
,
-- именно "по части имени", а не по имени. Для поиска папок по имени (а я это понял только лишь из Вашего кода) этот код не совсем подходит и в некоторых случаях не будет выводить корректную информацию.

Например, создайте папку "Новая" в корне диска "D" с неким древом с помощью такого кода:

Windows Batch file
1
2
3
4
5
6
7
@echo off
md "D:\Новая"
pushd "D:\Новая"
for /l %%i in (1 1 3) do for /l %%j in (1 1 3) do md "%%i\%%j"
for /l %%i in (1 1 3) do rem:>"%%i.txt"
for /f "delims=" %%i in ('dir/ad/b/s') do xcopy/iy * "%%i\"
popd
.

Далее протестируйте этот код (то есть приведённый Вами код с изменениями согласно первому пункту):

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
 
set "drive=D:"
 
md "%USERPROFILE%\Desktop\papka" 2>nul
 
>"%USERPROFILE%\Desktop\papka\list.txt" (
for /f "delims=" %%i in ('"dir/ad/b/s "%drive%\Новая" 2>nul"') do @(
 dir/a-d/b/s "%%i" 2>nul
 echo.
)
)
 
exit/b
.

Вот содержимое файла "list.txt", который будет создан:

D:\Новая\1\1.txt
D:\Новая\1\2.txt
D:\Новая\1\3.txt
D:\Новая\1\1\1.txt
D:\Новая\1\1\2.txt
D:\Новая\1\1\3.txt
D:\Новая\1\2\1.txt
D:\Новая\1\2\2.txt
D:\Новая\1\2\3.txt
D:\Новая\1\3\1.txt
D:\Новая\1\3\2.txt
D:\Новая\1\3\3.txt

D:\Новая\2\1.txt
D:\Новая\2\2.txt
D:\Новая\2\3.txt
D:\Новая\2\1\1.txt
D:\Новая\2\1\2.txt
D:\Новая\2\1\3.txt
D:\Новая\2\2\1.txt
D:\Новая\2\2\2.txt
D:\Новая\2\2\3.txt
D:\Новая\2\3\1.txt
D:\Новая\2\3\2.txt
D:\Новая\2\3\3.txt

D:\Новая\3\1.txt
D:\Новая\3\2.txt
D:\Новая\3\3.txt
D:\Новая\3\1\1.txt
D:\Новая\3\1\2.txt
D:\Новая\3\1\3.txt
D:\Новая\3\2\1.txt
D:\Новая\3\2\2.txt
D:\Новая\3\2\3.txt
D:\Новая\3\3\1.txt
D:\Новая\3\3\2.txt
D:\Новая\3\3\3.txt

D:\Новая\1\1\1.txt
D:\Новая\1\1\2.txt
D:\Новая\1\1\3.txt

D:\Новая\1\2\1.txt
D:\Новая\1\2\2.txt
D:\Новая\1\2\3.txt

D:\Новая\1\3\1.txt
D:\Новая\1\3\2.txt
D:\Новая\1\3\3.txt

D:\Новая\2\1\1.txt
D:\Новая\2\1\2.txt
D:\Новая\2\1\3.txt

D:\Новая\2\2\1.txt
D:\Новая\2\2\2.txt
D:\Новая\2\2\3.txt

D:\Новая\2\3\1.txt
D:\Новая\2\3\2.txt
D:\Новая\2\3\3.txt

D:\Новая\3\1\1.txt
D:\Новая\3\1\2.txt
D:\Новая\3\1\3.txt

D:\Новая\3\2\1.txt
D:\Новая\3\2\2.txt
D:\Новая\3\2\3.txt

D:\Новая\3\3\1.txt
D:\Новая\3\3\2.txt
D:\Новая\3\3\3.txt
.

1) Обратите внимание на то, что имена большинства файлов продублированы.

2) Так же обратите внимание на то, что имена файлов "D:\Новая\1.txt", "D:\Новая\2.txt", "D:\Новая\3.txt" вовсе не попали в этот список.

3) Пакетный файл в данном случае даже не будет "пытаться" искать какие-нибудь другие папки с именем "Новая" на диске "D". Он ограничится выводом содержимого только папки "Новая", находящийся в корне диска "D".

Поиск папок по имени с помощью команды "DIR" в отличие от поиска файлов всегда должен быть поиском по фиктивной маске этого имени с последующей фильтрацией вывода с использованием команды "FINDSTR". То есть в какую-нибудь позицию в строке имени папки необходимо ставить символ подстановки, например:
*Новая
,
Новая*
,
?Новая
,
Новая?
,
Но*вая
,
Нов?ая
,
а затем использовать фильтр:
Windows Batch file
| findstr/eilc:"\Новая"
.

Вот правильный код пакетного файла для поиска на одном диске папок по имени с выводом их содержимого:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
 
set "drive=D:"
 
md "%USERPROFILE%\Desktop\papka" 2>nul
 
>"%USERPROFILE%\Desktop\papka\list.txt" (
for /f "delims=" %%i in ('2^>nul dir/ad/b/s "%drive%\Новая?"^| findstr/eilc:"\Новая"') do @(
 2>nul dir/a-d/b/s "%%i"
 echo.
)
)
 
exit/b
.

Пакетный файл должен быть сохранён в кодировке "OEM-866" (список файлов будет получен также в этой кодировке).


alpap, посмотрите также мой код для получения даты и времени создания файла в теме "BAT: получить дату создания/модификации файла и добавить в имя архива". Если приведённый там же мной код для получения даты и времени модификации файла (кстати, к которому Вы написали в этой же теме правильное толкование) можно использовать и для папок, то применять код для получения даты и времени создания файла к папкам нельзя по причине испольования в нём именно команды "DIR", чтобы применять его для папок, необходимо внести какие-то очень серьёзные изменения.
4
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
12.06.2015, 12:13  [ТС]
ComSpec, Спасибо за столь плодотворное разъяснение, не думал что здесь "водятся подводные камни" ан нет, хотя один диск был взят для примера, а планировался поиск всех батников на локальных дисках ПК
Windows Batch file
1
...wmic logicaldisk where drivetype=3 get Name...
и вот тут есть пока небольшая проблема задать маску. Представляю сколько мне их выдаст поиск, можно было бы исключить С:\, но они то и там есть, а вот с Вашим кодом
Цитата Сообщение от ComSpec Посмотреть сообщение
Вот правильный код
, за что большое спасибо, будет проще и оперативнее - забираю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2015, 12:13
Помогаю со студенческими работами здесь

Как создать нумерованный список файлов?
Есть sd карта, которую использую в машине. как можно создать нумерованный список песен, чтобы можно было понимать где какая песня? ...

Создать список файлов, находящихся в папке (Word)
Добрый вечер, форумчане. Возникла задача, решить не получается сколько ни мучаюсь:( Необходимо создать в Ворде макрос, чтобы при его вызове...

Создать список файлов и заархивировать их через WinRAR
Помогите пожалуйста,нужно создать батник который: сохранит местоположение всех файлов с заданным расширением в файле с указанным...

Перевести код с C# - получить список файлов, перетащенных в окно программы
вод код string FileArr=(string)E.Data.GetData(DataFormats.FileDrop,false) где E это System.Windows.Forms.DragEventArgs

Как создать список файлов exe по определенному пути
Помогите создать список файлов exe по определенному пути. То есть ищу функцию, чтобы GetFileList('D:\Downloads\', Memo1.Lines); и в поле...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru