Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файлов во вложенных папках и копирование в другую

Ответить
Настройки темы
CMD/BAT - [решено] Поиск файлов во вложенных папках и копирование в другую

Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


В общем надо считать с реестра значения параметра WrkDir (=путь к рабочей директории программы) . В реестре может быть несколько параметров WrkDir (разные пути) . После полученные директории просканировать и найти в них все *.stt файлы (Искать файлы надо также во всех подпапках данных директорий) и скопировать их в папку, созданную рядом с батником (например папка будет \123).
Естественно такой код у меня не заработал

Код: Выделить весь код
For %%A In (HKCU\Software\ConsultantPlus /v WrkDir) Do (
   For /F "Tokens=3" %%B In ('Reg Query %%A /S ^| Find /I "WrkDir"') Do ( Set dir=%%B
     for /f %%i in (%dir%) do (
        Set FILES=%%i
        Set TARGET= "%~dp0123\" 
        for /r %FILES% %%f in (*.stt) do (
            xcopy %%f %TARGET% /y
            )
        )
     )
)
Подскажите как это реализовать?

Например этот код:
Код: Выделить весь код
For %%A In (HKCU\Software\ConsultantPlus /v WrkDir) Do (
   For /F "Tokens=3" %%B In ('Reg Query %%A /S ^| Find /I "WrkDir"') Do Echo %%B>> "%~dp0result.txt"
)
запишет в файл 2 строки:
Код: Выделить весь код
C:\ConsLocalUserData
C:\ConsUserData

Отправлено: 23:38, 27-08-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


1. С какого пути начинать искать — с «HKCU\Software\ConsultantPlus»?
2. Что делать, если очередной найденный файл совпадёт по имени с уже скопированным?

Отправлено: 01:22, 28-08-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


Цитата Iska:
1. С какого пути начинать искать — с «HKCU\Software\ConsultantPlus»? »
Да. Только в этой ветке искать все значения с параметром WrkDir. Каждое значение и является директорией, где надо искать файлы (и в подпапках этой директории)

Цитата Iska:
2. Что делать, если очередной найденный файл совпадёт по имени с уже скопированным? »
Если совпадает, то сохранять наиболее "свежий"

Отправлено: 02:09, 28-08-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


V!RTuE, а сделайте-ка экспорт этого подраздела в *.reg, упакуйте его в архив и выложите — чтобы было с чем работать.

Цитата V!RTuE:
Если совпадает, то сохранять наиболее "свежий" »
«Свежий» — надо понимать как тот файл, у которого наиболее близкие дата/время последней модификации к текущей дате, так?

Отправлено: 03:05, 28-08-2014 | #4


Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать



Цитата Iska:
V!RTuE, а сделайте-ка экспорт этого подраздела в *.reg, упакуйте его в архив и выложите — чтобы было с чем работать. »
прикрепил K+ reestr.zip

Цитата Iska:
«Свежий» — надо понимать как тот файл, у которого наиболее близкие дата/время последней модификации к текущей дате, так? »
Да, всё верно.

И еще, возможно не всегда директория, указанная в качестве значения параметра в реестре, будет существовать на компьютере (Могли удалить папку, а реестр не почистить. Батник должен просто пропускать эту директорию и искать в других. Но точно хоть одна, из указанных в реестре, будет существовать).

Отправлено: 03:35, 28-08-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Сделаем чуть иначе. Пробуйте:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

if not exist "%~dp0123" md "%~dp0123"

for /f "usebackq tokens=3" %%i in (
	`reg.exe query "HKEY_CURRENT_USER\Software\ConsultantPlus" /s 2^>nul ^| findstr.exe /r /c:"WrkDir.*REG_SZ"`
) do if exist "%%~i\." xcopy "%%~i\*.stt" "%~dp0123" /i /s /d

endlocal
exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:04, 28-08-2014 | #6


Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


Iska, Так работает. Но копирует не только файлы, но и папки, в которых эти *.stt файлы располагаются. Как переделать чтобы в итоге в папке 123 были только файлы без папок?

Код: Выделить весь код
C:\ConsLocalUserData\7_008390_35625.STT
C:\ConsLocalUserData\CONS.CFG\7_008390_35625.STT
C:\ConsLocalUserData\CONS.CFG\dddfd\7_003872_35625.STT
C:\ConsLocalUserData\CONS.CFG\dddfd\7_008390_35625.STT
Скопировано файлов: 4.
Для продолжения нажмите любую клавишу . . .
ну и соответсвенно в папке 123 получилось

Код: Выделить весь код
\123\7_008390_35625.STT
\123\CONS.CFG\7_008390_35625.STT
\123\CONS.CFG\dddfd\7_003872_35625.STT
\123\CONS.CFG\dddfd\7_008390_35625.STT
И еще, код должен работать, даже если запускается на сервере. Для этого использовал такой ход
Код: Выделить весь код
SET f=%~dp0%
и везде вместо %~dp0 использовал %f%
Что тут надо переделать тогда?

Последний раз редактировалось V!RTuE, 28-08-2014 в 09:57.


Отправлено: 09:23, 28-08-2014 | #7


Ветеран


Сообщения: 874
Благодарности: 575

Профиль | Отправить PM | Цитировать


Цитата V!RTuE:
Как переделать чтобы в итоге в папке 123 были только файлы без папок? »
Заменить строку
Код: Выделить весь код
) do if exist "%%~i\." xcopy "%%~i\*.stt" "%~dp0123" /i /s /d
на строку
Код: Выделить весь код
) do if exist "%%~i\." for /f "delims=" %%j in ('dir /a-d/b/s "%%~i\*.stt" 2^>nul') do copy "%%j" "%~dp0123">nul
.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:11, 28-08-2014 | #8


Аватара для V!RTuE

Пользователь


Сообщения: 90
Благодарности: 6

Профиль | Отправить PM | Цитировать


РЕШЕНО!!!
Georgio, Iska, Большое спасибо.
Вот получился такой код. Работает и на локальной машине и на сервере:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

if not exist "%~dp0123" md "%~dp0123"

for /f "usebackq tokens=3" %%i in (
	`reg.exe query "HKEY_CURRENT_USER\Software\ConsultantPlus" /s 2^>nul ^| findstr.exe /r /c:"WrkDir.*REG_SZ"`
) do if exist "%%~i\." for /f "delims=" %%j in ('dir /a-d/b/s "%%~i\*.stt" 2^>nul') do copy "%%j" "%~dp0123">nul

endlocal
exit /b 0
PS. Использовать SET f=%~dp0% здесь мне не надо было, как я думал (использовал в другой части кода, где действительно это необходимо было. наверное)

Последний раз редактировалось V!RTuE, 28-08-2014 в 10:56.


Отправлено: 10:22, 28-08-2014 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата V!RTuE:
Но копирует не только файлы, но и папки, в которых эти *.stt файлы располагаются. »
Я специально так оставил («Сделаем чуть иначе»), поскольку в простом copy нет:
Цитата V!RTuE:
Если совпадает, то сохранять наиболее "свежий" »
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:23, 28-08-2014 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файлов во вложенных папках и копирование в другую

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Подскажите как настроить отображение файлов во всех папках списком? Flurt Microsoft Windows 7 23 09-12-2020 00:57
CMD/BAT - [решено] Копирование в папку исходя из вложенных файлов foma24 Скриптовые языки администрирования Windows 6 23-08-2012 09:10
CMD/BAT - [решено] Удаление файлов по маске во времменых папках IE Shpil83 Скриптовые языки администрирования Windows 16 25-05-2012 15:06
Интерфейс - Персонализация не отображает фоновые рисунки рабочего стола во вложенных папках treehel Microsoft Windows 7 8 20-04-2012 19:57
CMD/BAT - Копирование только самых новых файлов в папках с сохранением структуры папок hoh Скриптовые языки администрирования Windows 3 03-01-2012 10:22




 
Переход