|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переместить файлы, содержащие определенное значение, +одноименные к ним. |
|
CMD/BAT - [решено] Переместить файлы, содержащие определенное значение, +одноименные к ним.
|
Новый участник Сообщения: 3 |
Трбуется:
1. в папке найти файлы, содержащие одно из нескольких определенных значений формата "TO|1234|" (цифры разные, всего 5 значений) 2. в зависимости от того, какое из значений было найдено - переместить файл в другую папку, папка назначения зависит от найденного значения. 3. вместе с найденным файлом переместить одноименный с ним, но с расширением .info (у найденного в п.1 файла может быть любое расширение, кроме .info). 4. в папке поиска вести лог, в который добавлять имена всех перемещенных файлов. Желательно в 2х вариантах - для запуска с того же компьютера, и для запуска по сети (доступ к шаре по логину\паролю). Спасибо! |
|
Отправлено: 23:12, 01-10-2010 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать p.s. небольшое замечание, возможно полезное для оптимизации - в самом файле искомые значения находятся в начале 3й строки, но строка после них продолжается.
|
Отправлено: 23:26, 01-10-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать jahvdet, 1-4 примерно так:
@echo off set SRC=c:\SRC set DST=1234-d:\DST\1;5678-d:\DST\2;9012-d:\DST\3;3456-d:\DST\4;7890-d:\DST\5 PUSHD "%SRC%"& SETLOCAL EnableDelayedExpansion for %%i in (%DST%) do for /f "tokens=1* delims=-" %%a in ("%%i") do set "$_%%a=%%b"& set $r=!$r! /c:"TO|%%a|" for /f "tokens=1-3 delims=:|" %%a in ('findstr %$r% *') do if /i not "%%~xa"==".info" ( xcopy /y "%%a" "!$_%%c!\" >nul 2>&1 && ( del /f "%%a" >nul 2>&1 echo %%a --^^^> !$_%%c!\ xcopy /y "%%~na.info" "!$_%%c!\" >nul 2>&1 && ( del /f "%%~na.info" >nul 2>&1 echo %%~na.info --^^^> !$_%%c!\ ) ) >>"%~n0.log" ) ENDLOCAL& POPD DST: назначения: --------------------- 1234 - d:\DST\1 5678 - d:\DST\2 9012 - d:\DST\3 3456 - d:\DST\4 7890 - d:\DST\5 --------------------- P.S. по поводу сети требуется уточнение: почему именно "удаленный запуск", а не локальная работа с общими ресурсами типа \\SERVER\SHARE\DIR ? |
Отправлено: 16:04, 02-10-2010 | #3 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Т.к. время поджимало, пришлось самому засесть и покапаться
![]() @echo off cls set bad=C:\BAD\%date% set sort=C:\SORT set log=%bad%\Offline_logs_%date%.txt rem ----------------------------- Тест на доступ к исходной папке if not exist "%bad%\*.*" ( echo Directory is not exist: %bad% GoTo :Eof ) rem ----------------------------- Если папки назначения нет - создать, не получается - выйти. if not exist "%sort%\*.*" (mkdir %sort% || goto :eof) rem ----------------------------- Вызов поиска поочередно для каждого значения Call :FindData 1234 Call :FindData 5678 Call :FindData 9012 Call :FindData 3456 Call :FindData 7890 GoTo :Eof :FindData rem ----------------------------- Если нет расширенной папки назначения (с кодом значения) - создать, не получается - выйти. if not exist "%sort%\%1\*.*" (mkdir %sort%\%1 || goto :eof) rem ----------------------------- Для каждого файла в папке вызываем процедуру поиска в нем заданного значения FOR %%i IN ("%bad%\*.*") DO Call :SearchInFile %%i %1 GoTo :eof rem ----------------------------- Поиск заданного значения, передаваемого во втором параметре, в файле, передаваемом в первом параметре rem ----------------------------- Если находим - перемещаем файл и связанный с ним INFO :SearchInFile If /I %~x1==.INFO GoTo :eof Else ( rem echo Searching %2 in %1 For /F "eol=Z skip=2 delims=| tokens=1,2" %%j in (%1) do ( if /I %%j == TO (if %%k==%2 ( echo Find! %%k in %~nx1 If NOT EXIST "%~dpn1.INFO" ((Echo [%TIME%] [%2] Ошибка! Для файла %1 не найден соответстующий файл .INFO >> %log%)&(GoTo :Eof)) else ( copy /Y "%1" "%sort%\%2" If NOT Exist "%sort%\%2\%~nx1" (Echo [%TIME%] [%2] Ошибка! Не удалось скопировать файл %1 >> %log%) Else ( Echo [%TIME%] [%2] %1 успешно скопирован в папку %sort%\%2 >> %log% del "%1" /Q If EXIST "%1" (Echo [%TIME%] [%2] Предупреждение! Не удалось удалить файл %1 >> %log%) else (Echo [%TIME%] [%2] %1 успешно удален >> %log%) ) copy /Y "%~dpn1.INFO" "%sort%\%2" If NOT Exist "%sort%\%2\%~n1.INFO" (Echo [%TIME%] [%2] Ошибка! Не удалось скопировать %~dpn1.INFO >> %log%) Else ( Echo [%TIME%] [%2] %~dpn1.INFO успешно скопирован в папку %sort%\%2 >> %log% del "%~dpn1.INFO" /Q If EXIST "%~dpn1.INFO" (Echo [%TIME%] [%2] Предупреждение! Не удалось удалить файл %~dpn1.INFO >> %log%) else (Echo [%TIME%] [%2] %~dpn1.INFO успешно удален >> %log%) ) ) ) ) ) ) |
Отправлено: 17:12, 02-10-2010 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] переместить файлы по папкам согласно списку | shadowbat | Скриптовые языки администрирования Windows | 9 | 17-11-2023 14:51 | |
C/C++ - [решено] одноименные методы в классе | Glareone | Программирование и базы данных | 1 | 20-06-2010 09:14 | |
Ошибка - [решено] Не могу переместить AVI файлы через панель инструментов. | kp.Drako | Microsoft Windows 2000/XP | 11 | 12-06-2010 00:36 | |
CMD/BAT - [решено] Перенос из заданных директорий в новую файлы, содержащие заданное слово | Lil Crazy | Скриптовые языки администрирования Windows | 11 | 14-05-2010 20:46 | |
Не открываются текстовые файлы и изображения и к ним создались файлы с расшир. drweb | leda | Лечение систем от вредоносных программ | 1 | 03-10-2009 01:22 |
|