Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Как найти папки, не содержащие определённых файлов 
Author Message
Ciber SLasH



PostPosted: Wed Jan 16, 2013 18:54    Post subject: Reply with quote

Скрипт заработал (я ошибся в указании путей)
Code:
@echo off
setlocal ENABLEEXTENSIONS
chcp 1251 > nul

set input="%~dp0test.txt"
set output="%~dp0--.lst"
:: Archives
set "mask=*.zip *.rar *.7z *.tgz *.gz *.tar *.bz2"
:: IMG
set "mask=%mask% *.iso *.nrg"
:: Graph
set "mask=%mask% *.jpg *.jpeg *.jp2 *.jpc *.gif *.png *.psd *.tif *.pcx *.tga *.bmp"
:: HTML
set "mask=%mask% *.htm *.html *.shtm *.shtml *.mht*"
:: Audio
set "mask=%mask% *.mp3 *.flac *.ape *.wma"
:: Video
set "mask=%mask% *.avi *.mpg *.mpeg *.m2v *.mpe *.asf *.mov *.rm"
:: Docs
set "mask=%mask% *.txt *.doc* *.xls* *.ppt* *.pdf"

if not [%input%]==[""] (
   if exist %input% (
      copy nul %output% > nul
      for /f "usebackq delims==" %%i in (%input%) do (
         echo -----
         echo Scan: %%i
         echo -----
         pushd "%%i"
         dir /b /a-d /s %mask% > nul 2>&1 || echo(%%i>>%output%
         for /d /r %%j in (*) do (
            REM title %%j
            echo %%j
            dir /s /b /a-d %mask% > nul 2>&1 || echo(%%j\>>%output%
            rem >nul 2>&1 dir /s /b /a-d %mask% || >>%output% echo(%%j\
         )
         popd
      )
   ) else (
      echo Error: file [%input%] not found!
   )
) else (
   echo Usage: %~nx0 ^<File-list^>
)

test.txt
Code:

C:\RECYCLER\
C:\tmp\


Добавлено спустя 55 минут:

С первым вопросом разобрался:
>nul 2>&1 dir /b/a-d/s %mask% || >>"%output%" echo(%%$\
Выполнить поиск файлов по всем вложенным каталога, начиная с текущего, соответствующих маске (при этом перенаправление ошибок и вывода идёт на ус-во null, чтобы не было никакого вывода и установился флаг %ERRORLEVEL%). Если файлов таких нет, то выполняется вторая команда после || которая записывает в выходной файл путь.
По идее можно переписать так:
dir /b/a-d/s %mask% > nul 2>&1 || echo(%%$\>>"%output%"

Все вопросы решены, тему можно закрывать Wink
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group