Пакетный файл для выполнения зацикленного поиска на основе позиций текстового файла - PullRequest
0 голосов
/ 19 декабря 2010

Я читал отличные посты на этом форуме и приблизился к тому, что я хочу сделать, но не смог понять точный код.

Я хочу создать пакетный файл Windows для следующих действий:

  • Выполните циклический поиск для каждой позиции текстового файла (это список ключевых слов), чтобы найти файлы в определенном каталоге
  • Для этого поиска частичное совпадение в порядке.
  • Каждый раз, когда файл найден, перемещайте его в заранее определенный каталог (например, C: \ temp \ search_results)

Спасибо.

Ответы [ 3 ]

1 голос
/ 20 декабря 2010

В данный момент у меня не работает Windows, поэтому я могу публиковать только некоторые идеи, но не решение.

1) Используйте for /f для перебора содержимого файла.

2) Используйте find "%Keyword%" %SourceDir%, чтобы получить список подходящих файлов. Вам придется анализировать имена файлов по выводу find.

2a) В качестве альтернативы вы можете перебирать файлы в исходном каталоге (с вложенным for) и вызывать find для каждого файла, отбрасывая его вывод и используя его код выхода (%ERRORLEVEL%), чтобы решить, файл соответствует (он вернет 0, если есть совпадение, и ненулевой, если совпадения нет). Примерно так:

for %%F in (%SourceDir%\*) do (
    find "%Keyword%" %%F > nul
    if not errorlevel 1 (echo File %%F matches) else (echo File %%F does not match)
)

3) Переместить соответствующие файлы с помощью move.

0 голосов
/ 22 декабря 2010

Есть несколько проблем.

FIND / i "% A%" ... не может работать, имя FOR-Varibale - %% A
И вторая проблема: сНАЙДИТЕ, что вы проверяете содержимое файла, а не имя.И вы должны использовать отступ, чтобы избежать слишком больших скобок.

Лучше попробуйте

FOR /F "tokens=*" %%A IN (%listfile%) DO (
    FOR %%f in (%searchdir%\*) do ( 
        set "filename=%%~f"
        set replaced=!filename:%%A=!
        if !replaced! NEQ !filename! (
           echo !filename! contains '%%A'
        )
    )
)

Он пытается заменить %% A внутри имени файла на.Если заменяемое имя не совпадает с именем файла, оно должно содержать %% A

0 голосов
/ 22 декабря 2010

Я написал следующий код, но не уверен, что я на правильном пути. Вот моя установка: Содержимое файла list.txt (мои ключевые слова для поиска по имени) -

one
two
five
ten
six
Папка

f1 содержит -

four.txt
one.txt
three.txt

Я хочу переместить соответствующие файлы в папку F2, но для простоты кода я использую echo.

Мой код:

@ECHO OFF
SETLOCAL EnableDelayedExpansion


SET listfile=D:\batchtest\list.txt
SET searchdir=D:\batchtest\f1

FOR /F "tokens=*" %%A IN (%listfile%) DO (

FOR %%f in (%searchdir%\*) do (FIND /i "%A%" %%f
    if errorlevel 1 (
echo Search failed) else (
echo Search successful
)   
)
)
)

Он работает, но не находит подходящих имен файлов.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...