如何将 WMC 与 Windows 平板电脑同步

感谢 @DFox 编写此脚本及说明

一个简单的脚本和流程,可自动让我的媒体中心录制的电视节目、经 MCE Buddy 转换后的文件,以及我在 Surface RT 上的这些文件保持同步,包括我在 Surface 上观看后的状态。

需要两个文件,可从这里下载:

  1. PurgeWatchedTV.vbs
  2. Sync TV.xml

脚本和流程很简单,但下面我会详述所有细节。

概言之,在目标设备上需导入 Windows 计划任务“Sync TV”和“PurgeWatchedTV”脚本。我已导出此 Sync TV 任务。如需这两个文本文件,请告诉我如何发送。

高层工作流:
我的媒体中心电脑(PC 名为“MediaCenter”)将电视节目录制到“Recorded TV”位置。MCE Buddy 将这些文件(在我的情况下转为 mp4)转换到同一台 PC 的“Converted TV”文件夹。在我的 Surface RT 上,每次登录时,它会将 Converted TV 中的增量文件复制到 SD 卡的“TV”文件夹,并移除已从 Converted TV 删除的文件。当我离家并在 Surface 上看完一集后,会将该文件移到 SD 卡上的“Watched TV”文件夹。当我回家并登录 Surface 时,Sync TV 计划任务和“PurgeWatchedTV”脚本会从 Watched TV、Converted TV 和 Recorded TV 中删除这些文件。

前置条件:

  1. MCE Buddy 文件重命名必须包含“ ;”及原始文件名。我认为脚本也假设根目录无文件;即需要按节目名和电影分文件夹。例如,我的设置为:
    %ismovie%<Movies\%showname% ;%originalfilename%,%showname%\S%season%##E%episode%## - %airyear%_%airmonth%_%airday% - %episodename% ;%originalfilename%>
  2. MCE Buddy 配置为保持文件同步。
  3. 家庭组(Homegroup)。
  4. 在主机 PC 上为家庭组设置 Recorded TV 和 Converted TV 共享。我的为 \\MediaCenter\Recorded TV\\MediaCenter\Converted TV
  5. 在平板/笔记本上有一个文件夹,包含 TV 文件、脚本文件及名为“Watched TV”的专用子文件夹。我的为 D:\TV,然后 D:\TV\Watched TVD:\TV\TV
  6. 在平板/笔记本上配置名为“Sync TV”的计划任务。

“Sync TV”计划任务详情:

  1. 运行 PurgeWatchedTV 脚本。该脚本会删除 Converted TV 共享中存在于本地 D:\Watched TV 文件夹内的任何文件及空文件夹,然后删除 Recorded TV 共享中对应的原始 .wtv 文件。

  2. 运行 robocopy 镜像命令,在 \\MediaCenter\Converted TVD:\TV\TV 之间同步。

  3. PurgeWatchedTV 脚本还会清理 Recorded TV 与 Watched TV 之间的孤立文件。有时我在 Media Center 上删除一集而文件正在转换时会出现这种情况,此时 MCE Buddy 不会自动移除已转换文件。该脚本会检查 Converted TV 存在而 Recorded TV 不存在的文件,并将其从 Recorded TV 删除。

  4. 计划任务配置为仅在家中网络时运行。若未设置,则在外出连接到任何网络时都会尝试运行 Sync TV。问题是在外时 robocopy 命令会自行重试且永不超时;我希望在家中如此,但外出时不运行。幸运的是,Windows 计划任务中已有此设置。

参数:

  1. 媒体中心 PC 名及共享。若与上述不同,需修改 PurgeWatchedTV 脚本中的共享路径及 Sync TV 任务中 robocopy 命令的路径。
  2. 转换后的 TV 文件格式。若非 mp4,需修改 PurgeWatchedTV 的 FileExtension 变量。
  3. 目标设备的本地存储路径。若不同,同样修改 robocopy 命令及 PurgeWatchedTV。
  4. 导入 Sync TV 任务时指定 OS 类型。我不确定是否必要,但总归是良好实践。
  5. Sync TV 任务运行的用户名。导入任务时需在首个界面指定用户名。应为你本人,假设你对自己的设备有管理员权限。
  6. Sync TV 任务中的家庭网络名称。导入任务时,在条件中指定设备所连家庭网络的名称。我的家庭网络与 WiFi 同名。

已知问题:

  1. Sync TV 任务仅在登录时运行。对我无妨,因为我每晚都会关闭 Surface。你也可以自定义或添加其他计划任务,如按指定时间或唤醒时运行,但我未测试。另请注意下方其他潜在限制。
  2. 网络需完全初始化。因计划任务设计为仅在特定网络运行,设备需完全连接至该网络。问题是我的 Surface 启动后约一秒才连上 WiFi。若登录过程早于连接完成,则 Sync TV 不会运行。我需要输入 PIN 登录(Exchange 策略),因此对我而言无妨,因到我解锁并输入 PIN 时 WiFi 已连接。Windows 有设置可要求登录前必须联网。我曾在公司域上用组策略成功配置,但在 Surface 本地策略上未能实现。因我的设置可用,未再排查,但若你自动登录或用定时计划任务,可能需要查看此设置。
  3. 复制过程显然需持续网络连接。然而 Windows RT 似乎不将命令提示符复制视为活动,最终网络会休眠。这会中断 robocopy,其仅等待网络恢复。这也是我将任务设为登录时运行的另一原因,因我通常此时打算使用设备,留有足够时间完成复制。同样,默认配置下定时计划任务可能无效,因网络不会活跃。你也可以配置网络保持活跃,但会牺牲电池性能。也可更高级地让计划任务唤醒网络、运行任务,再于任务前若网络原为睡眠则恢复睡眠,但我未折腾,因对我的使用场景非必需。
  4. 我仅在 Windows RT 上测试,但应适用于 Windows 7 和 8。
  5. 使用 Windows 8 视频应用查看和管理这些视频文件体验不佳:无文件夹组织、文件名截断、无法管理文件移至 Watched TV 文件夹。而使用桌面 Windows 资源管理器查看略显笨拙(RT 8.0)。因此,我使用“My Explorer”应用,并将 D:\TV\TV 文件夹 设为收藏:
    Microsoft Store - Download apps, games & more for your Windows PC
  6. 我 literally 用 Surface 触摸屏上的记事本敲出此脚本,故未做太多异常处理,也未优化,但因在本地 LAN 运行,除实际复制外脚本运行足够快。