Пользователь |
Сообщение: (Нужна специфическая) команда DOS (Тема#81639) |
minemax
полковник
: Киев
С нами с 18.12.05
Посты: 6408
|
Мне понадобилось вывести список всех папок, которые не содержат определенный файл (допустим, readme.txt).
Возможно ли такое?
|
|
|
aZ
езмъ Он
Возраст: 39
: Украина
С нами с 22.08.08
Посты: 12094
|
на линухе не проблема, а в дос я хз возможно ли такое вообще.
|
|
|
Silent Dude
голос разума
: Paradise
С нами с 18.02.10
Посты: 34476
|
|
|
Shu®Mu®
КонтрАдмирал
Возраст: 55
: Kiev,Ukraine
С нами с 06.04.04
Посты: 17999
|
возможно но конкретной команды нет, надо писать пакетный файл.
Описания команд, фильтров итд 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
полковник
: Киев
С нами с 18.12.05
Посты: 6408
|
Вот, предположим, есть программа "Windows Grep".
Чего вводить-то тут?
Повторю, что задача стоит вывести список папок, не содержащих файл, в названии которого присутствует readme.
|
|
|
aZ
езмъ Он
Возраст: 39
: Украина
С нами с 22.08.08
Посты: 12094
|
Ох и жесть))) Надо запомнить что такое существует.
|
|
|
Silent Dude
голос разума
: Paradise
С нами с 18.02.10
Посты: 34476
|
ХЗ, я не ставил) Тебе надо искать эквивалент
find ./ -mindepth 2 -maxdepth 2 -type d '!' -exec sh -c 'ls -1 "{}"|egrep -i -q "readme.txt"' ';' -print
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
на
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) 55 Просмотр(ы)
|
|
|
minemax
полковник
: Киев
С нами с 18.12.05
Посты: 6408
|
Code:
@echo off
FOR /R %%I in (.) DO (
pushd %%I
IF NOT EXIST "readme.txt" echo %%I >> "E:\testres.txt"
popd
)
Работает! Спасибо.
А можно туда еще добавить "пропускать все папки с названием temp"?
|
|
|
KillMachine UA
генералиссимус
Возраст: 43
: Київ
С нами с 10.12.07
Посты: 25376
|
як мед, так і ложкою
|
|
|
Tester_1
генералиссимус
Возраст: 47
: Kovel,Ukraine
С нами с 10.11.03
Посты: 13415
|
Алгоритм на три операції
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
полковник
: Киев
С нами с 18.12.05
Посты: 6408
|
Алгоритм на три операції
Ой, спасибо, но это слишком сложно. Меня такой код пугает.
Я просто думал, что в вариант, предложенный пользователем KillMachine UA в цикл можно добавить дополнительное условие.
Насколько я понимаю, это можно сделать двумя вариантами:
а) если %ЭТАПАПКА равна temp прерываем текущее кольцо цикла;
б) если %ЭТАПАПКА не равна temp, тогда если не существует ридми ... ...
|
|
|
Tester_1
генералиссимус
Возраст: 47
: Kovel,Ukraine
С нами с 10.11.03
Посты: 13415
|
Работает! Спасибо.
А можно туда еще добавить "пропускать все папки с названием temp"?
можна удалити із отриманого списка строки
type E:\testres.txt | find /v /i "\temp\" > E:\testres-wo-temp.txt
|
|
|
minemax
полковник
: Киев
С нами с 18.12.05
Посты: 6408
|
type E:\testres.txt | find /v /i "\temp\" > E:\testres-wo-temp.txt
Да, вот это работает. Благодарю.
В итоге, я получил список, который хотел. Можно считать, что задача выполнена.
|
|
|