Войти

Показать полную графическую версию : [решено] Пакетный поиск


ruslaw
02-10-2013, 21:48
Имеется главная папка (напр. - "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
В принципе я имел ввиду, что имя файла (test1.txt) и его полное имя (D:\folderA\folderK\test1.txt) будут отделены табулятором (или точкой с запятой).
И второе, о чем я не сказал, это что имена файлов и папок будут на русском, включая пробелы.
Я попробовал Ваш скрипт. Он делает файл содержащий имена и полные имена всех файлов в папке (русские имена выводятся как кракозябры и не перекодируются). Но это не решает мою задачу, мне нужно найти только те, что в списке. Есть ли решение для такой задачи?

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

И второе, о чем я не сказал, это что имена файлов и папок будут на русском, включая пробелы.
Я попробовал Ваш скрипт. Он делает файл содержащий имена и полные имена всех файлов в папке (русские имена выводятся как кракозябры и не перекодируются). »
Пробелы не бывают на русском. «Кракозябры» — это обычная 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
Отлично работает, спасибо!




© OSzone.net 2001-2012