Войти

Показать полную графическую версию : Создать общий списк файлов в директориях


antonyk
14-01-2012, 00:39
Создать общий списк файлов в директориях:
В качестве параметров принимать имена директорий. В каждой директории
искать файл files.bbs в котором хранится список имен файлов. В текущей
директории создать файл all_files.txt в котором будет хранится имена
директорий и файлы в них находящиеся. При отсутствии директории - выдавать
ошибку, но продолжать обработку следующей директории. Если файла files.bbs
нет в директории - создать его.

Заранее Благодарен !!!

zion87
14-01-2012, 09:32
antonyk, вот такое решение будет работать но только с одной директорией(параметром), как сделать несколько директорий "компактным кодом" - не знаю (ждите ответов гуру :))

@echo off
If '%1==' GoTo :Eof
if exist "%1" for /f "delims=*" %%a in (' dir /s /b "%1\*.*" ^|findstr /bev /c:files.bbs /c:all_files.txt ') do echo %%a>>"%1\all_files.txt" && (
if not exist "%1\files.bbs" for /f "delims=*" %%b in (' dir /b "%1\*.*" ^|findstr /bev /c:files.bbs /c:all_files.txt ') do echo %%b>>"%1\files.bbs"
)
if not exist "%1" echo error not found && pause
goto:eof

при условии, что я правильно понял условие:

директории нет - error not found
отсутствует files.bbs - создаем files.bbs и в нем список файлов из текущей директории

file1.ini
file2.ini
и так далее ...

создается файл all_files.txt - в нем файлы с путями

c:\file1.ini
c:\file2.ini
и так далее ...


вообщем я хочу сказать, что если вы хотите задать два параметра и более, то придется несколько раз скопировать вот это в бат

if exist "%1" for /f "delims=*" %%a in (' dir /s /b "%1\*.*" ^|findstr /bev /c:files.bbs /c:all_files.txt ') do echo %%a>>"%1\all_files.txt" && (
if not exist "%1\files.bbs" for /f "delims=*" %%b in (' dir /b "%1\*.*" ^|findstr /bev /c:files.bbs /c:all_files.txt ') do echo %%b>>"%1\files.bbs"
)
if not exist "%1" echo error not found && pause

заменяя %1 на %2,%3,%4,%5 - если вы сделаете для 5 директорий, то можно будет вводить и одну и две и три и т.д. до пяти включительно и все равно будет работать...

antonyk
14-01-2012, 11:41
Конечно спасибо за ответ, но что-то не видно что он делает

zion87
14-01-2012, 14:14
antonyk, из командной строки -файл.bat "c:\путь к папке"
делает это

директории нет - выдает 'error not found'
если в директории отсутствует files.bbs - создаем files.bbs и в нем список файлов из текущей директории
создается файл all_files.txt - в нем файлы из текущей директории с путями

antonyk
14-01-2012, 14:59
При изменении на %2.... не работает вообще и если не секрет что оно должно сделать если поменять ?

antonyk
14-01-2012, 15:16
Если можешь сделай еще на такую тему батничек.


Слить файлы в один:
В качестве параметров принимать имена файлов и слить все эти файлы
в файл имя которого задано последним. Если такой файл уже существует -
запросить у пользователя разрешение на перезавись(см. команду choice). Если
хоть один из файлов несуществует - завершить работу с ошибкой и выводом
помощи

zion87
14-01-2012, 15:17
antonyk, по первому запросу вам нужно искать с нескольких директориях? и директории вводите сразу при запуске бат из командной строки? или директории известны заранее и их можно в бат записать заранее??

вопрос по второму что значит
Слить файлы в один: » - я знаком только со склейкой текстовых файлов copy 1.txt + 2.txt(ну или rar), как то не очень понятен вопрос, далее Если
хоть один из файлов несуществует »
из каких файлов не существует ???
можно на пальцах объяснить к примеру на диске d:\есть папка 1 нужно из этой папки и т.д.




© OSzone.net 2001-2012