Форумы Серверы Суспільство
Игры Серверы VBIOS General Soft & Hard Увлечения А поговорить... Культура Полезная информация Межигір'я Чат

Пользователь Сообщение: (Нужна специфическая) команда DOS        (Тема#81639)
minemax 
полковник
minemax
: Киев
С нами с 18.12.05
Посты: 6408
12.12.14 12:48 Ukraine #1813270
Мне понадобилось вывести список всех папок, которые не содержат определенный файл (допустим, readme.txt).

Возможно ли такое?
aZ 
езмъ Он
aZ
Возраст: 36
: Украина
С нами с 22.08.08
Посты: 12094
12.12.14 12:57 [Re: minemax] Europe #1813273
на линухе не проблема, а в дос я хз возможно ли такое вообще.
Silent Dude 
голос разума
Silent Dude
: Paradise
С нами с 18.02.10
Посты: 33519
12.12.14 13:40 [Re: aZ] Ukraine #1813286
Grep for Windows
Shu®Mu® 
КонтрАдмирал
Shu®Mu®
Возраст: 52
: Kiev,Ukraine
С нами с 06.04.04
Посты: 17927
12.12.14 13:50 [Re: Silent Dude] Ukraine #1813292
возможно но конкретной команды нет, надо писать пакетный файл.
Описания команд, фильтров итд http://stfw.ru/page.php?id=16827
Основной список можно вывести по help или /?
Пример фильтров подобных тому который тебе нужен
  • цитата:
FIND [/V] [/C] [/N] "строка" [[диск:][путь]имя_файла[ ...]]
Поиск текстовой строки в одном или нескольких файлах.
Параметры:
* /V - Вывод всех строк, НЕ содержащих заданную строку. * /C - Вывод только общего числа строк, содержащих заданную строку. * /N - Снабжение отображаемых строк номерами. * /I - Поиск без учета регистра символов. * "строка" - Искомая текстовая строка. * [диск:][путь]имя_файла - Файл либо файлы, в которых производится поиск.

Если путь не задан, FIND производит поиск в тексте, введенном с клавиатуры, либо переданном по конвейеру другой командой. Пример:
DIR A: | FIND /V "компьютер"
Выведет имена всех файлов, не содержащих слово "компьютер".
Вы можете использовать параметр /V вместе с /C ИЛИ /N, но /N не будет работать с /C.

minemax 
полковник
minemax
: Киев
С нами с 18.12.05
Посты: 6408
12.12.14 14:02 [Re: Shu®Mu®] Ukraine #1813297
Вот, предположим, есть программа "Windows Grep".
Чего вводить-то тут?


Повторю, что задача стоит вывести список папок, не содержащих файл, в названии которого присутствует readme.
aZ 
езмъ Он
aZ
Возраст: 36
: Украина
С нами с 22.08.08
Посты: 12094
12.12.14 14:07 [Re: minemax] Europe #1813299
Ох и жесть))) Надо запомнить что такое существует.
Silent Dude 
голос разума
Silent Dude
: Paradise
С нами с 18.02.10
Посты: 33519
12.12.14 14:22 [Re: minemax] Ukraine #1813309
ХЗ, я не ставил) Тебе надо искать эквивалент

find ./ -mindepth 2 -maxdepth 2 -type d '!' -exec sh -c 'ls -1 "{}"|egrep -i -q "readme.txt"' ';' -print
KillMachine UA 
генералиссимус
KillMachine UA
Возраст: 39
: Київ
С нами с 10.12.07
Посты: 25376
12.12.14 15:00 [Re: minemax] Ukraine #1813327
на

Code:
@echo off FOR /R %%I in (.) DO ( pushd %%I IF NOT EXIST "readme.txt" echo %%I >> "E:\testres.txt" popd )



вместо E:\testres.txt вставишь своё что-то



Прикрепления: test.zip (216 B) 29 Просмотр(ы)

minemax 
полковник
minemax
: Киев
С нами с 18.12.05
Посты: 6408
12.12.14 15:10 [Re: KillMachine UA] Ukraine #1813335
  • KillMachine UA :
Code:
@echo off FOR /R %%I in (.) DO ( pushd %%I IF NOT EXIST "readme.txt" echo %%I >> "E:\testres.txt" popd )



Работает! Спасибо.

А можно туда еще добавить "пропускать все папки с названием temp"?
KillMachine UA 
генералиссимус
KillMachine UA
Возраст: 39
: Київ
С нами с 10.12.07
Посты: 25376
12.12.14 15:14 [Re: minemax] Ukraine #1813338
як мед, так і ложкою
Tester_1 
генералиссимус
Tester_1
Возраст: 44
: Kovel,Ukraine
С нами с 10.11.03
Посты: 13406
12.12.14 15:30 [Re: Silent Dude] Ukraine #1813345
Алгоритм на три операції

1)папки з файлами readme.txt рекурсивно із D:\TEST
Code:
@Echo Off Set LST=c:\list.txt Set FILE="d:\test\*readme.txt" del /q %LST% Set RES="0" For /f "Delims=" %%a In ('Dir /s /b /a-d "%FILE%"') Do Call :1 "%%~dpa" Goto:Eof :1 If %RES% NEQ %1 ( Set RES=%1 If %RES% NEQ "0" Echo %RES:~1,-2% >>%LST% )



2) всі папки рекурсивно із D:\TEST
Code:
@Echo Off Set LST=c:\list-all.txt Set FOLDER=d:\test\ del /q %LST% for /f "delims=" %%i in ('dir /b /s /a-d "%FOLDER%"') do ( rem for /r "%FOLDER%" /d %%i in (*) do ( echo %%i >>%LST% )



3) удаляєм із усіх папок папки з файлами
Code:
findstr /i/v/g:c:\list.txt c:\list-all.txt >c:\result.txt


список знаходиться у файлі c:\result.txt
minemax 
полковник
minemax
: Киев
С нами с 18.12.05
Посты: 6408
12.12.14 15:40 [Re: Tester_1] Ukraine #1813347
  • Tester_1 :
Алгоритм на три операції



Ой, спасибо, но это слишком сложно. Меня такой код пугает.

Я просто думал, что в вариант, предложенный пользователем KillMachine UA в цикл можно добавить дополнительное условие.

Насколько я понимаю, это можно сделать двумя вариантами:
а) если %ЭТАПАПКА равна temp прерываем текущее кольцо цикла;
б) если %ЭТАПАПКА не равна temp, тогда если не существует ридми ... ...
Tester_1 
генералиссимус
Tester_1
Возраст: 44
: Kovel,Ukraine
С нами с 10.11.03
Посты: 13406
12.12.14 15:41 [Re: minemax] Ukraine #1813348
  • minemax :

Работает! Спасибо.

А можно туда еще добавить "пропускать все папки с названием temp"?

можна удалити із отриманого списка строки
type E:\testres.txt | find /v /i "\temp\" > E:\testres-wo-temp.txt
minemax 
полковник
minemax
: Киев
С нами с 18.12.05
Посты: 6408
12.12.14 15:53 [Re: Tester_1] Ukraine #1813357
  • Tester_1 :
type E:\testres.txt | find /v /i "\temp\" > E:\testres-wo-temp.txt


Да, вот это работает. Благодарю.

В итоге, я получил список, который хотел. Можно считать, что задача выполнена.
Icon Legend Права Настройки темы
Распечатать тему


770 Просмотры
Реклама
108 сейчас в онлайне
7 пользователей (6APMALEU, Евлампий Петрович, Din0saur, Omanaman, Арбанов, Drumace, Steelsader) и 0 скрытых, а также 101 гостей сейчас онлайн.
VBIOS Version 3.0 FINAL | ©1999-2020
Execution time: 0.07 seconds.   Total Queries: 62   Zlib сжатие вкл.
All times are (GMT+2.0). Current time is 17:50
Top