Переместить файлы, содержащие определенное значение, +одноименные к ним.
Трбуется:
1. в папке найти файлы, содержащие одно из нескольких определенных значений формата "TO|1234|" (цифры разные, всего 5 значений)
2. в зависимости от того, какое из значений было найдено - переместить файл в другую папку, папка назначения зависит от найденного значения.
3. вместе с найденным файлом переместить одноименный с ним, но с расширением .info (у найденного в п.1 файла может быть любое расширение, кроме .info).
4. в папке поиска вести лог, в который добавлять имена всех перемещенных файлов.
Желательно в 2х вариантах - для запуска с того же компьютера, и для запуска по сети (доступ к шаре по логину\паролю).
Спасибо!
|
p.s. небольшое замечание, возможно полезное для оптимизации - в самом файле искомые значения находятся в начале 3й строки, но строка после них продолжается.
|
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 ?
|
Т.к. время поджимало, пришлось самому засесть и покапаться :) взял за основу пару решений похожих задач, может местами коряво и не слишком изящно, но вот что получилось:
Код:
@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. после уточнения задания, второй вариант с работой по сети не актуален.
|
Время: 13:57.
© OSzone.net 2001-