@echo off
rem string target destination
call :movefiles "MOUNT" "C:\test\*.print_job.*" "C:\Folder1"
call :movefiles "PROD" "C:\test\*.print_job.*" "C:\Folder2"
call :movefiles "SPI" "C:\test\*.print_job.*" "C:\Folder3"
goto :eof
:movefiles
if not exist "%~3" md "%~3"
for /f "delims=" %%A in ('2^>nul findstr /l /m /c:"%~1" "%~2"') do (
move "%%~A" "%~3"
)
goto :eof
Использование call :movefiles
для обработки каждой из 3 строк
искать в целевых файлах.
Синтаксис вызова: call :movefiles <string> <target> <destination>
Делает каталог назначения, если он не существует. Если строка найдена
в целевом файле, файл будет перемещен в место назначения
папка.
Используются findstr
аргументы:
/l
Буквально использует строки поиска.
/m
Печатает только имя файла, если файл содержит совпадение.
/c:string
Использует указанную строку в качестве буквенной строки поиска.
Вы можете вставить rd "%~3"
после цикла for
, если хотите
удалить пустые папки назначения.
Зацикливание каждые 2 секунды:
@echo off
:main
rem string target destination
call :movefiles "MOUNT" "C:\test\*.print_job.*" "C:\Folder1"
call :movefiles "PROD" "C:\test\*.print_job.*" "C:\Folder2"
call :movefiles "SPI" "C:\test\*.print_job.*" "C:\Folder3"
timeout /t 2 /nobreak >nul
goto :main
:movefiles
if not exist "%~3" md "%~3"
for /f "delims=" %%A in ('2^>nul findstr /l /m /c:"%~1" "%~2"') do (
echo move "%%~A" "%~3"
)
goto :eof
Возможно, вам придется использовать Ctrl + C , чтобы завершить сценарий в непрерывном цикле.
Если вместо этого вы можете использовать планировщик задач, это может сработать.