在我的 Android 手机上,它被配置为将图片保存到手机内存。
我想释放手机中的一些内存,而且由于我有一张 16GB 的 uSD 卡,因此我:
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
我相信你想要的一切都可以用 PowerShell 完成。我想知道的是,你真的需要使用 PowerShell 还是可以从批处理文件调用的命令行实用程序来做?
例如,要将图像的时间戳设置为其 Exif 标头中存储的内容,只需指定:
要将任何文件的最后修改/访问时间戳复制到另一个文件,您可以使用:
触碰-r 源文件 目标文件 (此版本的触碰是适用于 Win32 的 GNU 实用程序)
要将任何文件的最后创建/修改/访问的时间戳复制到另一个文件,您可以使用:
触碰/c /m /a /r SourceFile DestFile (此版本的触碰是Win32 控制台工具箱)
注意:所有这三个实用程序都可以通过上面的链接下载。