Copie arquivos sequenciais de várias pastas para novas pastas

3

Estou usando o Windows 10 e trabalhando com imagens de vídeo com várias câmeras. Vou usar um exemplo para explicar melhor.

Exemplo

Eu estive em uma filmagem com 6 câmeras, todas filmando a mesma cena ao mesmo tempo. Eu despejo as imagens e acabo com 6 pastas separadas (uma pasta por câmera), e cada pasta tem um número igual de fotos, ou "takes".

A câmera "takes" é numerada sequencialmente, embora cada câmera tenha seu próprio nome individual. Os arquivos na pasta Câmera A podem ser chamados GOPR0023, GOPR0024, GOPR0025, enquanto aqueles na pasta Câmera B podem ser chamados de GOPRO0111, GOPR0112, GOPRO0113.

Eu gostaria

O que eu quero fazer é criar pastas para cada "take" ... por exemplo, pasta ~\Take1 , que inclui "take 1" das câmeras A, B, C, D, E, F, etc. / p>

Como posso fazer isso com o menor esforço no Windows 10? Quando eu tenho 6 pastas de câmera com 20 leva cada, leva muito tempo para fazer isso manualmente.

Essencialmente, eu gostaria de uma ferramenta que pega o primeiro arquivo (take 1) de cada pasta da câmera que os recorta e cola em uma nova pasta e repete (próximo take / file seqüencial) até que nenhum arquivo seja deixado. / p>     

por user543144 10.01.2016 / 01:39

2 respostas

1

Copy sequential files from multiple folders into new folder (Win 10)

I've been on a shoot with 6 cameras all shooting the same scene at once. I dump the footage and end up with 6 seperate folders (a folder per camera), and each folder has an equal number of shots, or "takes". What I then want to do is create folders for each "take"...for example Folder Take 1, which includes take 1 from camera A, B, C, D, E, F etc.

Abaixo estão dois exemplos de como concluir o que você está afirmando em sua pergunta que foi confirmada para funcionar conforme você explica no meu ambiente de teste.

Um script NÃO excluirá os takes ou arquivos originais de cada uma das seis pastas de origem da câmera e o outro excluirá os takes originais - não tinha certeza se você quiser excluir o arquivo de origem original leva depois ou não, então eu forneci um com e outro sem.

Você precisará inserir as variáveis para sua necessidade na lógica de script em lote dos exemplos abaixo. Você os salvará em um documento de texto (ou seja, tudo em qualquer um dos que você decidir usar - cada um é um script / arquivo de texto separado) e, em seguida, nomeará <something>.cmd . Uma vez que é um arquivo cmd nomeado e você tem suas variáveis plugadas, é só uma questão de clicar duas vezes para iniciá-lo para fazer o que você pede.

Notas variáveis

Adicionei comentários aos scripts em lote esclarecendo as variáveis que você precisará definir (apenas variáveis) e os nomes das pastas para o primeiro FOR loop, mas para esclarecer mais:

  • Onde ele está listado como SET CameraRootDir= , isso precisará ser configurado para igualar a pasta no nível raiz do caminho completo, onde TODAS as pastas da câmera existem. Presume-se que eles estejam todos na mesma pasta padrão e, a partir daí, todos eles têm sua própria pasta, como CameraA , CameraB e assim por diante.
  • Onde estiver listado como SET TakeRootDir= , será necessário definir essa opção como a pasta de nível de caminho completo na qual você deseja que as pastas Take1 , Take2 , Take3 e assim por diante existam.
  • Onde você vê a lógica FOR %%C IN ( , logo abaixo, você verá os itens listados abaixo de CameraA , CameraB e assim por diante. Cada um deles será igual ao nome da pasta ONE ONLY, onde cada número de câmera será o nome de um único nome de pasta abaixo da pasta pai, onde todos eles existem. Basta substituir cada um com os nomes das pastas da câmera onde os arquivos sequenciais ou pegados são salvos— DEIXE O COMMAS embora .

    CameraA,CameraB,CameraC, 
    CameraD,CameraE,CameraF
    
  • Se as pastas da sua câmera estiverem localizadas na raiz da unidade "C" como C:\CameraA , C:\CameraB , e assim por diante, convém ter certeza de que SET CameraRootDir=C:\ é assim. será igual a C:\ e os nomes das pastas acima (acima de itens citados em pontos) listados nessa parte da lógica serão iterados por meio dos seis, caso isso ajude a esclarecer; caso contrário, o caminho completo (se não o ROOT da unidade "C") será a pasta PARENT \ ROOT que contém essas pastas.

  • Assume-se também que a PRIMEIRA foto ou arquivo de imagem em cada pasta exclusiva da câmera será Take1 e a próxima depois disso Take2 e assim por diante nessa ordem seqüencial e é assim que eu tenho a lógica definida agora nos exemplos abaixo.

Outras notas

Por favor, tire um momento e olhe aqui ( Aceitando uma resposta ) para se familiarizar com a aceitação de respostas sobre Superusuário e outras comunidades do Stack Exchange para esse assunto. Se isso funciona para as suas necessidades, aceitar a resposta seria apreciado por gratidão.

Script em lote sem exclusão

@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

Script em lote com exclusão

@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

Mais recursos e leitura

por 10.01.2016 / 08:44
0

se você não quiser instalar ou codificar uma ferramenta:

  • faça uma pesquisa na árvore no Explorer
  • classifique o resultado de acordo
  • selecione e arraste e solte os arquivos que estão juntos em seu diretório de destino.

Qualquer coisa mais confortável precisa de algum software ou lote, o que pode existir ou não.

    
por 10.01.2016 / 04:21

Tags