Форум программистов, компьютерный форум, киберфорум
Наши страницы
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
AlexanderSh88
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 242
1

Рекурсивный поиск файлов по списку с последующим перемещением найденых в единую папку

25.11.2015, 10:46. Просмотров 1219. Ответов 6
Метки нет (Все метки)

Здравствуйте, подскажите, пожалуйста, как можно найти файлы в каталоге (который я укажу) и во всех его каталогов/подкаталогов, а потом переместить все эти найденные файлы в одну папку (которую я укажу). Список файлов находится в тхт файле (в столбик, с расширением)

Мы указываем путь, где нужно искать файлы (включая каталоги/подкаталоги):
Код
C:\OneDrive\work\NewsMaker
Указываем файл old.txt в котором находится имена файлов, которые прописаны с расширением в столбик.

Указываем папку в которую нужно переместить все найденные файлы:

Код
C:\OneDrive\work\NewsMaker\MOVE
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 10:46
Ответы с готовыми решениями:

Поиск на всех дисках файлов, содержащих определённое слово, и копирование найденых в определённую папку
Добрый день. Помогите пожалуйста создать бат файл дляпоиска файлов, который содержат определенное...

Поиск и выделение найденых ячеек с последующим выполнением программы
Всем доброго времени суток. Суть проблемы такова: надо данные со столбца V и W вставить в столбцы...

Сравнение даты изменения 2-ух файлов с перемещением нового в другую папку
Здравствуйте, есть cmd скрипт который закачивает файлы из интернета через wget, затем копирует в...

Рекурсивный поиск файлов
Доброго времени суток. Нужна помощь есть код который вполне подходит мне он ищет диски на компе...

рекурсивный поиск файлов
Всем привет! Нажно реализовать поиск файлов по маске. Набрасал вот такой код: int...

6
greg zakharov
Покинул форум
2216 / 885 / 248
Регистрация: 07.05.2015
Сообщений: 1,781
25.11.2015, 12:52 2
Общий принцип:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@echo off
  setlocal
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "%i%" neq "3" echo:Index is out of range.&goto:eof
    
    set "lst=%1"
    set "src=%2"
    set "des=%3"
    for %%i in (%lst% %src% %des%) do (
      if not exist "%%~fi" (
        echo:One or more argument is wrong.&goto:eof
      )
    )
    for /f %%i in (
      'find /c /v "" ^< %lst%'
    ) do set "i=%%i"
    for /l %%i in (1, 1, %i%) do (
      for /f "tokens=2 delims=:" %%j in (
        'findstr /vn "`" %lst% ^| findstr /brc:"^%%i:"'
      ) do (
        for /f "tokens=*" %%k in ('dir /s /b "%src%\%%j"') do (
          copy "%%k" "%des%"
        )
      )
    )
  endlocal
exit /b
0
AlexanderSh88
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 242
25.11.2015, 14:21  [ТС] 3
вот так подставил, но что - то вроде я не то сделал:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@echo off
  setlocal
    set "i=0"
    for %%i in (%*) do set /a "i+=1"
    if "%i%" neq "3" echo:Index is out of range.&goto:eof
    
    set "lst=ras.txt"
    set "src=C:\OneDrive\work\NewsMaker"
    set "des=C:\OneDrive\work\NewsMaker\MOVE"
    for %%i in (%lst% %src% %des%) do (
      if not exist "%%~fi" (
        echo:One or more argument is wrong.&goto:eof
      )
    )
    for /f %%i in (
      'find /c /v "" ^< %lst%'
    ) do set "i=%%i"
    for /l %%i in (1, 1, %i%) do (
      for /f "tokens=2 delims=:" %%j in (
        'findstr /vn "`" %lst% ^| findstr /brc:"^%%i:"'
      ) do (
        for /f "tokens=*" %%k in ('dir /s /b "%src%\%%j"') do (
          copy "%%k" "%des%"
        )
      )
    )
  endlocal
exit /b
0
greg zakharov
Покинул форум
2216 / 885 / 248
Регистрация: 07.05.2015
Сообщений: 1,781
25.11.2015, 14:45 4
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
  setlocal
    set "lst=ras.txt"
    set "src=C:\OneDrive\work\NewsMaker"
    set "des=C:\OneDrive\work\NewsMaker\MOVE"
    for /f %%i in (
      'find /c /v "" ^< %lst%'
    ) do set "i=%%i"
    for /l %%i in (1, 1, %i%) do (
      for /f "tokens=2 delims=:" %%j in (
        'findstr /vn "`" %lst% ^| findstr /brc:"^%%i:"'
      ) do (
        for /f "tokens=*" %%k in ('dir /s /b "%src%\%%j') do (
          copy "%%k" "%des%"
        )
      )
    )
  endlocal
exit /b
0
AlexanderSh88
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 242
25.11.2015, 15:30  [ТС] 5
Вот так сделал:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
  setlocal
    set "lst=C:\OneDrive\work\new\restore image\ras.txt"  (тут находится список имен файлов)
    set "src=C:\OneDrive\work\NewsMaker"                    (тут папка/подпапки в которой нужно искать)
    set "des=C:\OneDrive\work\NewsMaker\MOVE"           (сюда нужно перемещать)
    for /f %%i in (
      'find /c /v "" ^< %lst%'
    ) do set "i=%%i"
    for /l %%i in (1, 1, %i%) do (
      for /f "tokens=2 delims=:" %%j in (
        'findstr /vn "`" %lst% ^| findstr /brc:"^%%i:"'
      ) do (
        for /f "tokens=*" %%k in ('dir /s /b "%src%\%%j') do (
          copy "%%k" "%des%"
        )
      )
    )
  endlocal
exit /b

содержимое ras.txt:
Код
0001swl_m.jpg
0001swl_t.jpg
0002swl_m.jpg
0002swl_t.jpg
эти файлы есть в папке:
Код
C:\OneDrive\work\NewsMaker\ThumbsFiles\start\
Скрипт выполняется быстро... промелькнуло и все.. в папке MOVER файлы не появились
0
greg zakharov
Покинул форум
2216 / 885 / 248
Регистрация: 07.05.2015
Сообщений: 1,781
25.11.2015, 15:36 6
У Вас пробел в пути до файла-списка, поэтому либо:
Windows Batch file
1
2
3
...
set lst="C:\OneDrive\work\new\restore image\ras.txt"
...
Либо:
Windows Batch file
1
2
3
...
'findstr /vn "`" "%lst%" ^| findstr /brc:"^%%i:"'
...
Ну и разрешения на запись в папке назначения проверьте.
0
AlexanderSh88
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 242
25.11.2015, 17:16  [ТС] 7
Выбрал первый вариант:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
  setlocal
    set lst="C:\OneDrive\work\new\restore image\ras.txt"
    set src="C:\OneDrive\work\NewsMaker"
    set des="C:\OneDrive\work\NewsMaker\MOVE"
    for /f %%i in (
      'find /c /v "" ^< %lst%'
    ) do set "i=%%i"
    for /l %%i in (1, 1, %i%) do (
      for /f "tokens=2 delims=:" %%j in (
        'findstr /vn "`" %lst% ^| findstr /brc:"^%%i:"'
      ) do (
        for /f "tokens=*" %%k in ('dir /s /b "%src%\%%j') do (
          copy "%%k" "%des%"
        )
      )
    )
  endlocal
exit /b
Но к сожалению также осталось.. промелькнуло и все. Ставлю pause перед exit, все равно промелькнуло, не дав ничего прочитать.

если pause ставить выше строки
Windows Batch file
1
for /l %%i in (1, 1, %i%) do (
то, окно не исчезает, просто написано, нажмите любую клавишу.
Если ставлю pause ниже этой строчки, то окно мелькает и все. Ведь такое вряд ли может быть.. не может за долю секунды найтись файлы и переместиться
0
25.11.2015, 17:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2015, 17:16

Рекурсивный поиск файлов
Приветствую. Есть вот такая рабочая функция: function Scan($dir) { if...

Рекурсивный Поиск файлов
Доброго всем времени суток, я к вам со следующей проблемой: необходимо разобраться с рекурсивным...

Рекурсивный поиск файлов
Привет всем! Пишу программу, имеющую функционал поиска файлов по ключевым словам. Для начала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru