Скопируйте последовательные файлы из нескольких папок в новую папку (Win 10)
Я снимался на 6 камерах, которые снимали одну и ту же сцену одновременно. Я снимаю отснятый материал и в результате получаю 6 отдельных папок (папка на камеру), и у каждой папки есть одинаковое количество снимков или "дублей".
Затем я хочу создать папки для каждого "дубля" ... например, "Папка дубля 1", которая включает дубль 1 с камеры A, B, C, D, E, F и т.д.
Ниже приведены два примера того, как завершить то, что вы заявляете в своем вопросе, и которое было подтверждено, как вы объясняете в моей тестовой среде.
Один сценарий НЕ удалит исходные дубли или файлы из каждой из 6 исходных папок камеры, а другой удалит исходные дубли - я не был уверен, хотите ли вы удалить исходные дубли впоследствии или нет, поэтому я предоставил один с и один без.
Вам нужно будет подключить переменные для ваших нужд в логике пакетного сценария приведенных ниже примеров. Вы сохраните их в текстовом документе (т.е. все в одном из тех, которые вы решите использовать - хотя каждый из них представляет собой отдельный скрипт / текстовый файл), а затем назовете его <something>.cmd
. Как только это файл с именем cmd
и ваши переменные подключены, достаточно просто дважды щелкнуть его, чтобы запустить то, что вы просите.
Переменные Примечания
Я добавил комментарии к пакетным сценариям, разъясняющие переменные, которые вам нужно установить (только переменные), и имена папок для первого цикла FOR, но для уточнения:
- Если он указан как
SET CameraRootDir=
его необходимо установить равным полному корневому каталогу, где ВСЕ папки камеры существуют. Предполагается, что они находятся в одной и той же стандартной папке, и оттуда у всех есть свои собственные папки, такие как CameraA
, CameraB
и так далее.
- Если он указан как
SET TakeRootDir=
его необходимо установить равным папке полного пути, где вы хотите, чтобы существовали папки Take1
, Take2
, Take3
и т.д.
Где вы видите логику FOR %%C IN (
чуть ниже) вы увидите перечисленные ниже элементы CameraA
, CameraB
и т.д. Каждое из них будет соответствовать ОДНОМУ имени папки, ТОЛЬКО где каждая камера # будет именем одного и только уникальных имен папок под родительской папкой, в которой все они существуют. Просто замените каждый из тех , с именами папок камеры , где принимает или последовательные файлы являются saved- ОСТАВИТЬ запятых , хотя.
CameraA,CameraB,CameraC,
CameraD,CameraE,CameraF
Если папки вашей камеры расположены в корне диска "C" как C:\CameraA
, C:\CameraB
и т.д. , То вы должны быть уверены, что SET CameraRootDir=C:\
просто так, так что он будет равные C:\
и приведенные выше имена папок (над пунктами с кавычками), которые вы перечисляете в этой части логики, будут перебирать шестерку в случае, если это поможет прояснить; в противном случае полный путь (если не ROOT диска "C") будет папкой PARENT\ROOT, содержащей эти папки.
Также предполагается, что ПЕРВЫМ снимком или файлом изображения в каждой уникальной папке камеры будет Take1
а следующий после этого Take2
и так далее в этом последовательном порядке, так что теперь у меня есть логика, установленная в следующих примерах.
Другие заметки
Пожалуйста, уделите немного времени и посмотрите здесь (Принятие ответа), чтобы ознакомиться с принятием ответов по Super User и другим сообществам Stack Exchange по этому вопросу. Если это работает для ваших нужд, то благодарность будет принята за ответ.
Пакетный скрипт без удаления
@ECHO ON
::: --// The CameraRootDir variable is the root level variable just beneath each separate camera folder name
::: --// The TakeRootDir variable will be the folder location just beneath take1, take2, and so on will be created
SET CameraRootDir=C:\Path\Cameras
SET TakeRootDir=C:\Path\CopiedTakes
IF NOT EXIST "%TakeDir%" MD "%TakeDir%"
::: --// Each item below separate by a comma is the camera folder names just beneath the root level name
::: --// You will need to replace these entries with the actual camera folder name for each of your 6 cameras
FOR %%C IN (
CameraA,CameraB,CameraC,
CameraD,CameraE,CameraF
) DO (
SET TakeCount=0
CALL :CAMERA_MODE "%%~C"
)
GOTO EOF
:CAMERA_MODE
SET CameraDir=%CameraRootDir%\%~1
FOR /F "TOKENS=*" %%T IN (
'"DIR /B /A-D /OD "%CameraDir%\""'
) DO (
CALL :TakeMove "%%~T" "%~1"
)
GOTO EOF
:TakeMove
SET /A TakeCount=%TakeCount%+1
IF NOT EXIST "%TakeRootDir%\Take_%TakeCount%" MD "%TakeRootDir%\Take_%TakeCount%"
ECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"
GOTO EOF
Пакетный скрипт с удалением
@ECHO ON
::: --// The CameraRootDir variable is the root level variable just beneath each separate camera folder name
::: --// The TakeRootDir variable will be the folder location just beneath take1, take2, and so on will be created
SET CameraRootDir=C:\Path\Cameras
SET TakeRootDir=C:\Path\CopiedTakes
IF NOT EXIST "%TakeDir%" MD "%TakeDir%"
::: --// Each item below separate by a comma is the camera folder names just beneath the root level name
::: --// You will need to replace these entries with the actual camera folder name for each of your 6 cameras
FOR %%C IN (
CameraA,CameraB,CameraC,
CameraD,CameraE,CameraF
) DO (
SET TakeCount=0
CALL :CAMERA_MODE "%%~C"
)
GOTO EXIT
:CAMERA_MODE
SET CameraDir=%CameraRootDir%\%~1
FOR /F "TOKENS=*" %%T IN (
'"DIR /B /A-D /OD "%CameraDir%\""'
) DO (
CALL :TakeMove "%%~T" "%~1"
)
GOTO EOF
:TakeMove
SET /A TakeCount=%TakeCount%+1
IF NOT EXIST "%TakeRootDir%\Take_%TakeCount%" MD "%TakeRootDir%\Take_%TakeCount%"
ECHO F | XCOPY /F /Y "%CameraDir%\%~1" "%TakeRootDir%\Take_%TakeCount%\%~2_%~1"
DEL /Q /F "%CameraDir%\%~1"
GOTO EOF
Дополнительные ресурсы и чтение