Copiando o registro de data e hora de um arquivo para outro (usando o PowerShell 2.0 no Windows-7)

3

No meu telefone Android, ele foi configurado para salvar fotos na memória do telefone.

Eu queria liberar alguma memória no telefone e, como tenho um cartão SD de 16 GB, eu:

1) copiou todas as imagens para o meu computador usando o cabo USB.
2) apagou os arquivos de imagem (e miniaturas) da memória do telefone.
3) configurou o telefone para salvar fotos no cartão usS.
4) copiou todas as fotos do computador para o cartão usb no telefone.

Tudo está funcionando agora, exceto pelo fato de que o registro de data e hora (e ordem de classificação) de todas as imagens no telefone (uSD) agora estão todas estragadas ... mostrando a data / hora em que realizei a operação de cópia.

Felizmente, os registros de data e hora das imagens no computador estão corretos.

Eu estava pensando em escrever um script usando o PowerShell (ou uma combinação de Lote / PowerShell) para:
1) para cada arquivo de imagem existente no telefone e no computador ...
2) leia os timestamps (criação e modificação) do arquivo no computador | 3) defina os timestamps para o arquivo no cartão de memória do telefone

Os caminhos são algo como:
Telefone: "K: \ DCIM \ 100Media"
Computador: "F: \ Android \ SDCard \ DCIM \ 100Media"

O que eu descobri até agora sobre o PowerShell, eu poderia fazer:

$timestampw = (Get-ChildItem 'F:\Android\SDCard\DCIM0Media\file1.jpg').LastWriteTime
$timestampc = (Get-ChildItem 'F:\Android\SDCard\DCIM0Media\file1.jpg').CreationTime

(Get-ChildItem 'K:\DCIM0Media\file1.jpg').LastWriteTime = $timestampw
(Get-ChildItem 'K:\DCIM0Media\file1.jpg').CreationTime = $timestampc

Ainda preciso de informações sobre:
1) não está claro determinar quando devo usar "Get-ChildItem" vs. "Get-Item"
2) verifique se o arquivo existe no telefone.
3) como passar os caminhos / nomes de arquivos para o script do PowerShell.
4) como se referir aos argumentos da linha de comando no script do PowerShell.

I could also use this in PowerShell to loop through all the files on the computer:  
$files = Get-ChildItem 'F:\Android\SDCard\DCIM0Media'  
ForEach ($file in $files) ...  

5) como agrupar tudo isso e criar um arquivo de script do PowerShell

Como uma alternativa para fazer isso inteiramente no PowerShell, eu poderia escrever um arquivo em lotes para chamar o PowerShell (linha de comando) duas vezes para cada arquivo:

@echo off

set "sp=F:\Android\SDCard\DCIM0Media"
set "dp=K:\DCIM0Media"
cd "%sp%"
cd "%dp%"
F:

for %%f in ("*.jpg") do call :work "%%f"
goto :EOF

:work
set fn=%~1
set "ss=%sp%\%fn%"
set "ds=%dp%\%fn%"

if not exist "%ds%" goto :EOF

call PowerShell ... 'copy LastWriteTime from "%ss%" to "%ds%"
call PowerShell ... 'copy CreationTime from "%ss%" to "%ds%"
goto :EOF

Para que isso funcione, eu só preciso saber como compor as linhas de comando para chamar o PowerShell.

Obviamente, o método Batch / PowerShell seria mais fácil de concluir, mas para uma melhor compreensão do PowerShell, seria ótimo ver ambos.

Além disso, é possível ler o timestamp de criação dos metadados do arquivo de imagem usando o PowerShell?

Obrigado a todos que podem ajudar.

    
por Kevin Fegan 24.10.2012 / 08:53

1 resposta

2

Tenho certeza de que tudo que você deseja pode ser feito com o PowerShell. O que eu quero saber é, você absolutamente precisa para usar o PowerShell ou utilitários de linha de comando que você pode invocar de um arquivo de lote?

Por exemplo, para definir o registro de data e hora das imagens para o que está armazenado em seus cabeçalhos Exif, basta especificar:

jhead -ft *.jpg (Command-line options detailed here)

Para copiar o carimbo de data / hora da última modificação / acesso de um arquivo para outro, você pode usar:

touch -r SourceFile DestFile (This version of Touch is part of the GNU Utilities for Win32)

Para copiar o último carimbo de data / hora / modificado / acessado de qualquer arquivo para outro, você pode usar:

touch /c /m /a /r SourceFile DestFile (This version of Touch is part of the Win32 Console ToolBox)

Nota: Todos os três utilitários podem ser baixados através dos links acima.

    
por 24.10.2012 / 22:40