Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Создать общий списк файлов в директориях (http://forum.oszone.net/showthread.php?t=225190)

antonyk 14-01-2012 00:39 1835375

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

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

zion87 14-01-2012 09:32 1835472

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 1835523

Конечно спасибо за ответ, но что-то не видно что он делает

zion87 14-01-2012 14:14 1835622

antonyk, из командной строки -файл.bat "c:\путь к папке"
делает это
  • директории нет - выдает 'error not found'
  • если в директории отсутствует files.bbs - создаем files.bbs и в нем список файлов из текущей директории
  • создается файл all_files.txt - в нем файлы из текущей директории с путями

antonyk 14-01-2012 14:59 1835668

При изменении на %2.... не работает вообще и если не секрет что оно должно сделать если поменять ?

antonyk 14-01-2012 15:16 1835682

Если можешь сделай еще на такую тему батничек.


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

zion87 14-01-2012 15:17 1835685

antonyk, по первому запросу вам нужно искать с нескольких директориях? и директории вводите сразу при запуске бат из командной строки? или директории известны заранее и их можно в бат записать заранее??

вопрос по второму что значит
Цитата:

Цитата antonyk
Слить файлы в один: »

- я знаком только со склейкой текстовых файлов copy 1.txt + 2.txt(ну или rar), как то не очень понятен вопрос, далее
Цитата:

Цитата antonyk
Если
хоть один из файлов несуществует »

из каких файлов не существует ???
можно на пальцах объяснить к примеру на диске d:\есть папка 1 нужно из этой папки и т.д.


Время: 05:23.

Время: 05:23.
© OSzone.net 2001-