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

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

Ответить
Настройки темы
CMD/BAT - [решено] Переместить файлы, содержащие определенное значение, +одноименные к ним.

Новый участник


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

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


Изменения
Автор: jahvdet
Дата: 01-10-2010
Описание: добавлен 4й пункт
Трбуется:
1. в папке найти файлы, содержащие одно из нескольких определенных значений формата "TO|1234|" (цифры разные, всего 5 значений)
2. в зависимости от того, какое из значений было найдено - переместить файл в другую папку, папка назначения зависит от найденного значения.
3. вместе с найденным файлом переместить одноименный с ним, но с расширением .info (у найденного в п.1 файла может быть любое расширение, кроме .info).
4. в папке поиска вести лог, в который добавлять имена всех перемещенных файлов.

Желательно в 2х вариантах - для запуска с того же компьютера, и для запуска по сети (доступ к шаре по логину\паролю).
Спасибо!

Отправлено: 23:12, 01-10-2010

 

Новый участник


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

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


p.s. небольшое замечание, возможно полезное для оптимизации - в самом файле искомые значения находятся в начале 3й строки, но строка после них продолжается.

Отправлено: 23:26, 01-10-2010 | #2



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

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


Googler


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

Профиль | Отправить 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
SRC: каталог-источник
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
Благодарности: 0

Профиль | Отправить 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%)
		)
		)
	)
	)
	)
)
p.s. после уточнения задания, второй вариант с работой по сети не актуален.

Отправлено: 17:12, 02-10-2010 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход