Использование robocopy вместо xcopy в цикле пакетных файлов

Вопрос:

У меня есть пакетный файл, который я использовал для отслеживания всех файлов в каталоге (и его подпапках), который содержит список из примерно 15 номеров продуктов, введенных в виде списка, разделенного пробелами. (Например, “54323 12345 68483 234 9993384 29944”.)

Тем не менее, я в основном просматриваю массивный пул изображений дважды для каждого продукта. Так как у меня обычно есть список из примерно 15 продуктов для загрузки изображений, это может занять некоторое время, так как оно должно искать всю папку 30 раз. (Файлы называются 12345.jpg или 12345_n.jpg.)

Есть ли способ использовать Robocopy (или что-то еще), чтобы ускорить работу?

Вот мой пакетный файл прямо сейчас:

set SourceFolder=\\ImagePoolNetworkLocation
set TargetFolder=C:\Users\BevansDesign\Desktop\Images
set /p SKUList=SKU Numbers:
for %%i in (%SKUList%) do (
xcopy /s %SourceFolder%\%%i.* %TargetFolder%\
xcopy /s %SourceFolder%\%%i_*.* %TargetFolder%\
)

Я думал, что если я могу войти в цикл в команду robocopy, я мог бы найти все файлы в первом поиске. Это в основном логическая цепочка (я думаю), но я не знаю, как вставить функцию “для” в вызов robocopy.

robocopy /s %SourceFolder%\ %TargetFolder%\ [for %%i in (%SKUList%) do (%%i.* and %%i_*.*)]

Это возможно? Я довольно плохо разбираюсь в базовом программировании.

Спасибо за помощь или даже просто указали мне в правильном направлении!

Ответ №1

Это фильтрует весь skulist, используя DIR и findstr за один проход:

В настоящий момент команда ECHO будет отображать только все команды xcopy в списке, чтобы проверить, использует ли он правильный синтаксис, и вы можете удалить ECHO если все выглядит правильно.

Он скопирует все файлы в один каталог %TargetFolder% поэтому дайте мне знать, нужно ли их копировать в отдельные папки в% TargetFolder%.

@echo off
set "SourceFolder=\\ImagePoolNetworkLocation"
set "TargetFolder=C:\Users\BevansDesign\Desktop\Images"
set /p SKUList=SKU Numbers:
set list=
for %%a in (%SKUList%) do call set list=%%list%% %%a.jpg %%a_*.jpg
pushd "%SourceFolder%"
for /f "delims=" %%i in (' dir %list% /b /s /a-d ^|findstr /ir "%list%" ') do (
ECHO xcopy "%%i" "%TargetFolder%\"
)
popd
pause

Ответ №2

Я только что изменил команду в цикле:

robocopy /s %SourceFolder%\ %TargetFolder%\ %%i.* %%i_*.*

Это теоретически сократило бы время пополам, но, похоже, Robocopy намного быстрее, чем XCopy (по крайней мере для этого использования), поэтому потребовалось меньше времени. Достаточно хорошо для меня!

Оцените статью
TechArks.Ru
Добавить комментарий