|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Поиск файлов во вложенных папках и копирование в другую |
|
CMD/BAT - [решено] Поиск файлов во вложенных папках и копирование в другую
|
![]() Пользователь Сообщения: 90 |
В общем надо считать с реестра значения параметра 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" ) |
|
Отправлено: 23:38, 27-08-2014 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать 1. С какого пути начинать искать — с «HKCU\Software\ConsultantPlus»?
2. Что делать, если очередной найденный файл совпадёт по имени с уже скопированным? |
Отправлено: 01:22, 28-08-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
|
||
Отправлено: 02:09, 28-08-2014 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать V!RTuE, а сделайте-ка экспорт этого подраздела в *.reg, упакуйте его в архив и выложите — чтобы было с чем работать.
Цитата V!RTuE:
|
|
Отправлено: 03:05, 28-08-2014 | #4 |
![]() Пользователь Сообщения: 90
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Цитата Iska:
И еще, возможно не всегда директория, указанная в качестве значения параметра в реестре, будет существовать на компьютере (Могли удалить папку, а реестр не почистить. Батник должен просто пропускать эту директорию и искать в других. Но точно хоть одна, из указанных в реестре, будет существовать). |
|||
Отправлено: 03:35, 28-08-2014 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить 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 |
![]() Пользователь Сообщения: 90
|
Профиль | Отправить 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\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 и везде вместо %~dp0 использовал %f% Что тут надо переделать тогда? |
Последний раз редактировалось V!RTuE, 28-08-2014 в 09:57. Отправлено: 09:23, 28-08-2014 | #7 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Цитата V!RTuE:
|
|
Отправлено: 10:11, 28-08-2014 | #8 |
![]() Пользователь Сообщения: 90
|
Профиль | Отправить 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 |
Последний раз редактировалось V!RTuE, 28-08-2014 в 10:56. Отправлено: 10:22, 28-08-2014 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 15:23, 28-08-2014 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Подскажите как настроить отображение файлов во всех папках списком? | 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 |
|