Компьютерный форум 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=269202)

ruslaw 02-10-2013 21:48 2227599

Пакетный поиск
 
Имеется главная папка (напр. - "D:\folderA\") с различными файлами и субпапаками разной степени вложения.
Имеется список имен файлов.
Как сделать bat(vbs/js)-файл который создавал бы отчет в виде csv-файла где первой строкой шел бы этот список, а второй список полных имен (полных адресов) этих файлов, напр.:
test1.txt D:\folderA\folderK\test1.txt
test2.pdf D:\folderA\folderW\test2.pdf
test3.doc D:\folderA\folderX\test3.doc
....................................
Т.е. речь идет о пакетном поиске с отчетом.

ruslaw 03-10-2013 02:14 2227715

В принципе я имел ввиду, что имя файла (test1.txt) и его полное имя (D:\folderA\folderK\test1.txt) будут отделены табулятором (или точкой с запятой).
И второе, о чем я не сказал, это что имена файлов и папок будут на русском, включая пробелы.
Я попробовал Ваш скрипт. Он делает файл содержащий имена и полные имена всех файлов в папке (русские имена выводятся как кракозябры и не перекодируются). Но это не решает мою задачу, мне нужно найти только те, что в списке. Есть ли решение для такой задачи?

Iska 03-10-2013 03:10 2227731

Цитата:

Цитата ruslaw
В принципе я имел ввиду, что имя файла (test1.txt) и его полное имя (D:\folderA\folderK\test1.txt) будут отделены табулятором (или точкой с запятой). »

Вставляйте в пакетный файл между именем и полным именем вместо пробела символ табуляции или точку с запятой.

Цитата:

Цитата ruslaw
И второе, о чем я не сказал, это что имена файлов и папок будут на русском, включая пробелы.
Я попробовал Ваш скрипт. Он делает файл содержащий имена и полные имена всех файлов в папке (русские имена выводятся как кракозябры и не перекодируются). »

Пробелы не бывают на русском. «Кракозябры» — это обычная OEM/866, читается любым приличным редактором без перекодировки. В принципе, не проблема сделать вывод в очевидно ожидаемой Вами ANSI/1251, переключив в пакетном файле кодовую страницу по «chcp 1251». Кодировка файла-списка, надо полагать, у Вас тоже в ANSI/1251? Но лучше не заниматься мазохизмом и держать и файл-список, и, само-собой, пакетный файл в умолчальной кодировке OEM/866.

Пробуйте:
читать дальше »
Код:

@echo off
setlocal enableextensions enabledelayedexpansion

set sFileList=FileList.txt
set sSourceFolder=E:\Песочница
set sOutFile=OutFile.txt

if exist "%sFileList%" (
        if exist "%sSourceFolder%\." (
                >nul copy nul "%sOutFile%"
               
                for /f "usebackq delims=" %%i in ("%sFileList%") do (
                        for /f "usebackq delims=" %%j in (`2^>nul dir /s /b /a:-d "%sSourceFolder%\%%~i"`) do (
                                >>"%sOutFile%" echo %%~nxj        %%~j
                        )
                )
        ) else (
                echo Can't find source folder [%sSourceFolder%].
        )
) else (
        echo Can't find file list [%sFileList%].
)

endlocal
exit /b 0


ruslaw 03-10-2013 11:52 2227835

Отлично работает, спасибо!


Время: 04:48.

Время: 04:48.
© OSzone.net 2001-