将文件连接到计算机时,如何自动将文件复制到USB驱动器?


18

我正在寻找一种解决方案,一旦连接了该设备,便可以将所有文件从硬盘驱动器上的特定目录复制到USB存储设备上的特定目录。

我有一个程序可以为我下载播客节目。

我希望将这些文件连接到计算机后,自动将它们移动(或至少复制)到mp3播放器中。

我同时拥有Windows XP和Linux计算机,因此对它们中的任何一个都可以使用的解决方案。


2
我认为您对预定的同步不满意?
Ivo Flipse,2009年

Answers:


23

您可以使用autorun.inf和.bat文件为Windows轻松构建自己的解决方案。

创建一个bat文件,将目录复制到USB驱动器。

xcopy /e /y c:\podcasts\*.* .\dir_on_usb_drive

将bat文件放在mp3播放器上,并按照以下说明创建autorun.inf

现在,您应该拥有自己的针对问题的内置解决方案,但是肯定有可能存在预制的解决方案:)


很棒的提示!!!+10
in.spite

1
谢谢你的建议。autorun.inf应该为:[autorun] open = getpodcasts.bat action =将播客复制到播放器至少是winxp sp2,这只会打开AutoPlayer,顶部是新的“复制播客到播放器”。我不认为有一种方法可以替代此方法,并强制其以静默方式运行脚本。同样显然,您必须打开自动播放功能。在窗口中弹出我需要的命令实际上是一个很大的改进,但是它仍然不是我想要的。
daphshez,2009年

好主意!:) +1

3
Microsoft是否只是删除了在拇指驱动器上使用自动运行的功能?
ale

10

对于Linux:

如果您不介意使用一些Python脚本,则可以编写一个守护程序,该守护程序侦听HAL中的事件,然后在插入您选择的设备后启动脚本。示例脚本如下所示

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import dbus
import dbus.service
if getattr(dbus, 'version', (0,0,0)) >= (0,41,0):
    import dbus.glib
import gobject
import sys
import os

class DeviceManager:
    def __init__(self):
        self.bus = dbus.SystemBus()
        self.bus.add_signal_receiver(self.device_added,
                        'DeviceAdded',
                        'org.freedesktop.Hal.Manager',
                        'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

        self.bus.add_signal_receiver(self.device_removed,
                        'DeviceRemoved',
                        'org.freedesktop.Hal.Manager',
                        'org.freedesktop.Hal',
                        '/org/freedesktop/Hal/Manager')

    def udi_to_device(self, udi):
        return self.bus.get_object("org.freedesktop.Hal", udi)

    def device_added(self, udi):
        print 'Added', udi
        properties = self.udi_to_device(udi).GetAllProperties()
        if properties.get('info.category') == u'volume':
            label, dev = properties.get('volume.label'), properties.get('block.device')
            print 'Mounting %s on /media/%s' %(dev, label)
            os.system('pmount %s /media/%s' %(dev, label))

    def device_removed(self, udi):
        print 'Removed', udi

if __name__ == '__main__':
    m = DeviceManager()

    mainloop = gobject.MainLoop()
    try:
        mainloop.run()
    except KeyboardInterrupt:
        mainloop.quit()
        print 'Exiting...'
        sys.exit(0)

您只需要修改device_added()功能以将其限制为特定设备,然后os.system()使用自定义脚本替换调用即可。

为了将其限制在驱动器中,volume.uuid可以使用该属性,并且可以在hal-device程序中显示可用属性的完整列表。

要在启动时启动守护程序,只需从启动它/etc/rc.local


我无法验证这是否是一个好答案,但是您应该为麻烦单独提供支持!无论如何,我会尝试使非程序员在这里变得更容易;-) 像我一样!
Ivo Flipse,2009年

9

Windows 7并在插入时自动同步到您的Flash / USB设备!

下载SyncToy并建立您的文件夹配对和同步名称(“ SyncTest”)

请参阅:操作方法:使用SyncToy对“我的文档”进行夜间镜像

  • 运行计算机管理控制台
  • 事件查看器/ Windows日志/系统
  • 查找媒体插入事件
    • “便携式设备枚举器服务服务进入运行状态。”(您可能需要清除事件日志并弹出/重新插入媒体以触发此日志事件)
  • 在上方的事件窗口中,右键单击该事件,然后选择“将任务附加到此事件”
  • Windows打开“创建基本任务窗口”
  • 给您的任务起个名字,然后点击下一步
  • 活动信息已经填写,下一步
  • 下一步应显示“启动程序”
  • 在“启动程序”窗口中,浏览到SyncToyCmd.exe(或您选择的同步应用程序)
  • 添加参数。如果您的备份配对称为SyncTest,请输入“ -RsyncTest”。-R,SyncToy命令行(或Windows 7)区分大小写时,请勿添加引号,也不要添加空格,因此SyncTest不等于synctest!
  • 接下来,完成

您可以直接从“任务计划程序”运行任务以验证其是否有效。现在,我遇到的唯一另一个问题是使用电池为笔记本电脑供电,在“任务管理器”的“条件”选项卡下,取消选中“仅当计算机使用交流电源时才启动任务”,否则任务将仅在插入交流电源后才能运行。

另外,随着USB轮询和断开/重新连接,此任务将每隔几分钟运行一次,实际上有点酷,它一直一直自动同步到USB HDD :)


2

编辑:事实证明SyncBack SE具有触发动作:

打开配置文件,转到“何时”选项卡,然后“插入”。它使您可以按驱动器号,标签或序列号指定。

但是SE版本不是免费的,并且仅Windows(我认为)

或者,您可以尝试使用TweakUI为同步程序(例如SyncToy)添加自动运行事件

  • 打开TweakUI
  • 转到我的计算机–>自动运行–>处理程序
  • 点击创建
  • 查找Synctoy的位置(默认为程序文件)
  • 双击程序启动器徽标
  • 选择下面列表中的所有媒体单选按钮。
  • 点击确定
  • 单击应用。

  • 现在插入您的笔式驱动器。

  • 在我的计算机上,右键单击驱动器,然后选择属性。
  • 点击自动播放标签
  • 从下拉菜单中选择音乐。
  • 点击单选按钮“选择要执行的操作”
  • 现在选择与SyncToy徽标同步
  • 重复下拉菜单提供的其他选项
  • 单击“应用”,然后单击“确定”。
  • 卸下并重新插入驱动器,以查看其是否正常运行

连接USB设备时,我似乎找不到任何将自动启动的程序。

他们都依靠调度来开始同步。您可以决定将它安排在我们的每一个地方,如果未连接USB设备,它将失败,如果已经连接,则它将运行。

但是老实说,如果您仅单击“同步”按钮,则也将更加容易,您还必须手动插入USB设备。

无论如何,我还发现了一个可以在Linux和Windows上运行的同步工具:DirSync Pro是完全免费的,可以在Java上运行,并且具有不错的GUI:

*  Synchronization
      o Powerful synchronization algorithm.
      o Bidirectional (Two way) and Unidirectional (One way) synchronization mode.
      o Option for various behavior of conflict resolution for Bidirectional Synchronization.
      o Synchronizes unlimited number of folders.
      o Large number of options to change the synchronization behavior.
      o Option to synchonise subdirectories recursively.
      o Synchronizes files/folders any file system (FAT, FAT16, FAT32, NTFS, WinFS, UDF, Ext2, Ext3, ...).
      o Synchronizes files from/to network drives
      o Synchronizes files from/to any mounted devices (Harddisks, USB-Sticks, Memory cards, External drives, CD/DVD's, ...).
      o Synchronization could be used for making incremental backups.
      o Option to create up to 50 backups from the modified/changed files before synchronization.
      o Option to define a backup folder.
      o Option for handling symbolic links.
      o Option for handling time-stamps.
* General
      o Easy, clear and user-friendly graphical user interface, no unnecessary gadget you never use.
      o Runs on every modern operating system including Windows™, Linux™ and Macintosh™
      o It is Portable! It does not need any installation. Just run the application!
      o Open source, it is 100% free of charge, 100% free of commercial text, 100% free of advertisements and 100% free of spyware.
      o No time/function limitations
      o Uses no local database, so no overhead
      o Does not need any installation. Just download and run it. You can put it on you USB-stick en you can run it on any computer/any platform.
* Logging
      o Advanced logging/reporting facilities. Just select a log level and define where to write the log.
      o Option to log on application level (default log)
      o Option to log on each directory level (dir log)
      o Option to define the log leven (how much to log)

1
您可以将其与计划任务结合使用,该任务使用Vista和Windows 7中的新触发事件在连接USB设备时使其运行。
Paxxi

1
我觉得在对方的回答中提到的自动运行的解决方案可以做的伎俩
伊沃Flipse

值得一提的是,我相信SyncBack SE 5是“插入式”功能的新增功能
。– daphshez

1

我尝试了Steven的方法,但是USB事件没有显示在“事件查看器/ Windows日志/系统”中(我使用的是Windows 7)。我戳了一下,发现USB插入事件位于“事件查看器/应用程序和服务日志/ Microsoft / Windows / DriverFrameworks-UserMode /操作”中。尝试首先清除日志(只是为了更轻松地找到所需的事件),然后插入USB闪存驱动器。刷新日志,然后会出现一堆事件。我选择了最重要的事件(即最近的事件),并将任务分配给该事件(确保事件描述看起来像特定于您插入的特定USB驱动器的东西)。

我使用免费的SyncBack程序进行实际的同步。很棒!


1

我只是使用带有几个批处理的AUTORUN.INF来同步密钥文件夹。很简单很有效。

另外,如果您拥有只读文件,请存档的autorun.inf文件将其硬合同USB棍病毒的


1

您只是在忘记""并结束".\dectory\" ←那个\斜线也是如此。

原始的批处理公式有效,到现在为止,目录,批处理文件和命令提示符中有很多空格将它们讨厌。

我的样子:

xcopy "F:\Web Stuff\Web Dev\Dev_FactorY Designs\*.*" ".\HTML_PROJ\Web Stuff\Web Dev\Dev_FactorY Designs\" /e /y

1

在Linux下,您可以使用已经运行的程序来代替监听程序连续运行来监听事件。您可以在udev上添加一些钩子,以将设备安装到临时位置,然后启动rsync来同步一堆目录。

顺便说一句,您可以根据设备签名定义特定的操作:插入特定密钥时,同步工作文档;插入USB大容量MP3播放器时,同步音乐;插入Kindle时,同步书籍。


1

当我在Raspbian Wheezy上运行的Raspberry Pi建立小的监视系统时,我需要不断地移动IP摄像机上传的FTP文件夹中的所有文件。因此,我在主目录(〜)中编写了脚本,并使用cron每分钟调用一次

crontab -e
*/1 * * * * sudo ~/move_images_to_usb

move_images_to_usb是普通的bash脚本,以前我不是在bash上编写脚本,但是...

#!/bin/bash

if df | grep "sda1"
then
    mkdir /media/usb0/ipcam1
    cp -r /var/ftp /media/usb0/ipcam1
    rm /var/ftp/*
fi

插入USB驱动器后,其名称为sda1(另一个驱动器将为sdb1,因此它将无法工作)


0

我使用Karenware的复制程序。她是Windows的许多小型有用程序的作者(想想W98 / W2K / XP早期的PowerToys)。

这是链接。http://www.karenware.com/powertools/ptreplicator.asp

每晚进行设置。如果插入了USB驱动器,它将使下载文件夹与USB内容同步。

免费!


谢谢; 但是我的问题不是副本本身(只是一堆文件位于一个目录中),而是使副本在正确的时间发生。计划好的任务很好,但与我要找的任务不完全相同。
daphshez

0

这是一个旧线程,但是我想我会在这里为任何想要的人使用。更改相关信息以适合您的需求,然后一切都会为您完成。值得一提的是/superuser//users/232313/tyler

@echo off
cls
echo waiting
goto check

Change the STUFF TO COPY location to the folder that you want 
everything inside to be send to the usb's, and change the 3 instances of 
G: to whatever drive letter that the USB uses.
Good Luck!

:start
set choice=
robocopy "C:\STUFFTOCOPY" "G:" /E
echo Waiting for removal
goto wait

:check
timeout /t 1 /nobreak >nul
if exist "G:" (goto start) else goto check

:wait
timeout /t 1 /nobreak >nul
if exist "G:" (goto wait) else (
echo removed
echo waiting
goto check
)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.