3

На моем телефоне Android он был настроен на сохранение картинок в память телефона.

Я хотел освободить память в телефоне, и, поскольку у меня есть карта на 16 ГБ с интерфейсом USB, я:

1) скопировал все картинки на мой компьютер с помощью USB-кабеля.
2) стерли файлы изображений (и эскизы) из памяти телефона.
3) настроил телефон для сохранения картинок на карту uSD.
4) скопировал все картинки с компьютера на карту uSD на телефоне.

Теперь все работает, за исключением того, что метка времени (и порядок сортировки) для всех изображений на телефоне (uSD) теперь все испорчены ... показывая дату / время, когда я выполнил операцию копирования.

К счастью, метки времени для картинок на компьютере верны.

Я думал написать скрипт, используя PowerShell (или комбинацию Batch/PowerShell) для:
1) для каждого файла изображения, который существует как в телефоне, так и на компьютере ...
2) читать метки времени (создание и изменение) из файла на компьютере
3) установить временные метки для файла на карте памяти телефона

Пути что-то вроде:
Телефон: "K:\DCIM\100Media"
Компьютер: "F:\Android\SDCard\DCIM\100Media"

То, что я нашел до сих пор о PowerShell, я мог бы сделать:

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

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

Мне все еще нужна информация о:
1) неясно определить, когда мне следует использовать «Get-ChildItem» против «Get-Item»
2) проверьте, существует ли файл на телефоне.
3) как передать пути / имена файлов в скрипт PowerShell.
4) как обращаться к аргументам командной строки в скрипте PowerShell.

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

5) как обернуть все это и создать файл сценария PowerShell

В качестве альтернативы тому, чтобы делать это полностью в PowerShell, я мог бы написать командный файл для вызова PowerShell (командной строки) дважды для каждого файла:

@echo off

set "sp=F:\Android\SDCard\DCIM\100Media"
set "dp=K:\DCIM\100Media"
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

Чтобы это работало, мне просто нужно знать, как составлять командные строки для вызова PowerShell.

Очевидно, что метод Batch/PowerShell будет проще завершить, но для дальнейшего понимания PowerShell было бы замечательно увидеть и то, и другое.

Кроме того, возможно ли прочитать метку времени создания из метаданных файла изображения с помощью PowerShell?

Спасибо всем, кто может оказать некоторую помощь.

1 ответ1

2

Я уверен, что все, что вы хотите, может быть сделано с PowerShell. То , что я хочу знать, вы абсолютно необходимо использовать PowerShell или прикажет строки утилиты , которые можно вызвать из пакетного файла сделать?

Например, чтобы установить для метки времени изображения то, что хранится в их заголовках Exif, просто укажите:

jhead -ft * .jpg (параметры командной строки подробно описаны здесь)

Чтобы скопировать последний измененный / использованный штамп времени любого файла в другой, вы можете использовать:

touch -r SourceFile DestFile (эта версия Touch входит в состав утилит GNU для Win32)

Чтобы скопировать последний созданный / измененный / использованный штамп времени любого файла в другой, вы можете использовать:

touch /c /m /a /r SourceFile DestFile (эта версия Touch является частью Win32 Console ToolBox)

Примечание: все три утилиты можно скачать по ссылкам выше.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .