Cómo copiar de forma automática fotos del móvil al ordenador

Sdílet
Vložit
  • čas přidán 6. 09. 2024
  • Plantilla Primer script sin modificar:
    Definir la ruta de destino en tu PC
    $destinationPath = "tudestino"
    $logFilePath = "tudestino\copiedFiles.log"
    Crear la carpeta de destino si no existe
    if (!(Test-Path -Path $destinationPath)) {
    New-Item -ItemType Directory -Path $destinationPath
    Write-Output "Carpeta de destino creada: $destinationPath"
    } else {
    Write-Output "Carpeta de destino ya existe: $destinationPath"
    }
    Crear el archivo de registro si no existe
    if (!(Test-Path -Path $logFilePath)) {
    New-Item -ItemType File -Path $logFilePath
    Write-Output "Archivo de registro creado: $logFilePath"
    } else {
    Write-Output "Archivo de registro ya existe: $logFilePath"
    }
    Cargar los archivos ya copiados desde el archivo de registro
    $copiedFiles = @{}
    if (Test-Path -Path $logFilePath) {
    $copiedFiles = Get-Content -Path $logFilePath | ForEach-Object { $_.Trim() }
    }
    Utilizar la biblioteca Shell.Application para acceder al dispositivo
    $shellApp = New-Object -ComObject Shell.Application
    Obtener la colección de dispositivos conectados (Explorador de Windows)
    $devices = $shellApp.Namespace(17) # 17 = Mi PC
    Buscar el dispositivo móvil
    $device = $devices.Items() | Where-Object { $_.Name -like "*Nombredetumovil*" }
    if ($device -eq $null) {
    Write-Output "El dispositivo no está conectado o la ruta es incorrecta."
    exit
    } else {
    Write-Output "Dispositivo encontrado: $($device.Name)"
    }
    Navegar a la carpeta de fotos en el dispositivo
    $internalStorage = $device.GetFolder.Items() | Where-Object { $_.Name -eq "Nombredealmacenamiento" }
    if ($internalStorage -eq $null) {
    Write-Output "No se encontró 'Nombredealmacenamiento'."
    exit
    } else {
    Write-Output "Accediendo a 'Nombredealmacenamiento'."
    }
    Navegar a la carpeta quequeramos en el almacenamiento interno
    $carpetaFolder = $internalStorage.GetFolder.Items() | Where-Object { $_.Name -eq "carpeta" }
    if ($carpetaFolder -eq $null) {
    Write-Output "No se encontró la carpeta 'carpeta'."
    exit
    } else {
    Write-Output "Accediendo a 'carpeta'."
    }
    Navegar a la carpeta subcarpeta de la quequeramos
    $subcarpetaFolder = $carpetaFolder.GetFolder.Items() | Where-Object { $_.Name -eq "subcarpeta" }
    if ($EjemploFolder -eq $null) {
    Write-Output "No se encontró la carpeta 'subcarpeta'."
    exit
    } else {
    Write-Output "Accediendo a 'subcarpeta'."
    }
    Copiar archivos nuevos al destino
    foreach ($item in $subcarpetaFolder.GetFolder().Items()) {
    if (-not $item.IsFolder) {
    $fileName = $item.Name
    $destinationFilePath = Join-Path -Path $destinationPath -ChildPath $fileName
    if ($fileName -notin $copiedFiles -or -not (Test-Path -Path $destinationFilePath)) {
    try {
    Obtener el objeto de destino
    $destinationFolder = $shellApp.Namespace($destinationPath)
    Copiar el archivo al destino
    $destinationFolder.CopyHere($item, 4) # 4 = No mostrar el cuadro de diálogo de progreso
    Esperar hasta que el archivo aparezca en el destino
    while (-not (Test-Path -Path $destinationFilePath)) {
    Start-Sleep -Milliseconds 100
    }
    Write-Output "Copiado: $fileName"
    Add-Content -Path $logFilePath -Value $fileName
    } catch {
    Write-Output "Error al copiar ${fileName}: $_"
    }
    } else {
    Write-Output "El archivo $fileName ya existe en la carpeta de destino o en la lista de copiados. Omitiendo."
    }
    }
    }
    Write-Output "Fotos copiadas exitosamente."
    La 2 plantilla lo teneis en el otro comentario

Komentáře • 10

  • @elespanolinformatico

    Plantilla Segundo script sin modificar:
    # Definir la ruta de destino en tu PC
    $destinationPath = "tudestino"
    $logFilePath = "tudestino\copiedFiles.log"
    # Crear la carpeta de destino si no existe
    if (!(Test-Path -Path $destinationPath)) {
    New-Item -ItemType Directory -Path $destinationPath
    Write-Output "Carpeta de destino creada: $destinationPath"
    } else {
    Write-Output "Carpeta de destino ya existe: $destinationPath"
    }
    # Crear el archivo de registro si no existe
    if (!(Test-Path -Path $logFilePath)) {
    New-Item -ItemType File -Path $logFilePath
    Write-Output "Archivo de registro creado: $logFilePath"
    } else {
    Write-Output "Archivo de registro ya existe: $logFilePath"
    }
    # Cargar los archivos ya copiados desde el archivo de registro
    $copiedFiles = @{}
    if (Test-Path -Path $logFilePath) {
    $copiedFiles = Get-Content -Path $logFilePath | ForEach-Object { $_.Trim() }
    }
    # Utilizar la biblioteca Shell.Application para acceder al dispositivo
    $shellApp = New-Object -ComObject Shell.Application
    # Obtener la colección de dispositivos conectados (Explorador de Windows)
    $devices = $shellApp.Namespace(17) # 17 = Mi PC
    # Buscar el dispositivo móvil
    $device = $devices.Items() | Where-Object { $_.Name -like "*Nombredetumovil*" }
    if ($device -eq $null) {
    Write-Output "El dispositivo no está conectado o la ruta es incorrecta."
    exit
    } else {
    Write-Output "Dispositivo encontrado: $($device.Name)"
    }
    # Navegar a la carpeta de fotos en el dispositivo
    $internalStorage = $device.GetFolder.Items() | Where-Object { $_.Name -eq "Nombredealmacenamiento" }
    if ($internalStorage -eq $null) {
    Write-Output "No se encontró 'Nombredealmacenamiento'."
    exit
    } else {
    Write-Output "Accediendo a 'Nombredealmacenamiento'."
    }

  • @javiervizueth2753
    @javiervizueth2753 Před 23 dny +1

    Muchas gracias por el video,es muy interesante. Pero si yo quisiera que se copiaran todas las imagenes que hay en el dispositivo no solo das de la carpera DCIM funcionaria igual o hay que medificar mas el codigo?...
    y tambien si quiero que se copie lo de mi tajeta SD.

    • @elespanolinformatico
      @elespanolinformatico  Před 18 dny +1

      Te dejao la plantilla para que puedas copiar desde la raiz, en este caso debes modificado el destino, el nombre de movil y el nombre de la unidad de almacenamiento. Si quieres un sd sustituyelo por el nombre de la unidad de almacenamiento ya que entiendo que una vez entres al movil tendras por un lado la unidad de almacenamiento y por otro el sd.
      La plantilla te la dejo en dos partes porque no puedo poner un comentario tan largo, siendo la parte 1 #Definir la ruta de destino...... y la 2 parte #Obtener la carpeta raiz y 3 # Obtener el objeto de destino . Copialo todo y juntalo en ese orden.

    • @elespanolinformatico
      @elespanolinformatico  Před 18 dny

      # Definir la ruta de destino en tu PC
      $destinationPath = "tudestino"
      $logFilePath = "tudestino\copiedFiles.log"
      # Crear la carpeta de destino si no existe
      if (!(Test-Path -Path $destinationPath)) {
      New-Item -ItemType Directory -Path $destinationPath
      Write-Output "Carpeta de destino creada: $destinationPath"
      } else {
      Write-Output "Carpeta de destino ya existe: $destinationPath"
      }
      # Crear el archivo de registro si no existe
      if (!(Test-Path -Path $logFilePath)) {
      New-Item -ItemType File -Path $logFilePath
      Write-Output "Archivo de registro creado: $logFilePath"
      } else {
      Write-Output "Archivo de registro ya existe: $logFilePath"
      }
      # Cargar los archivos ya copiados desde el archivo de registro
      $copiedFiles = @{}
      if (Test-Path -Path $logFilePath) {
      $copiedFiles = Get-Content -Path $logFilePath | ForEach-Object { $_.Trim() }
      }
      # Utilizar la biblioteca Shell.Application para acceder al dispositivo
      $shellApp = New-Object -ComObject Shell.Application
      # Obtener la colección de dispositivos conectados (Explorador de Windows)
      $devices = $shellApp.Namespace(17) # 17 = Mi PC
      # Buscar el dispositivo móvil
      $device = $devices.Items() | Where-Object { $_.Name -like "*Nombredetumovil*" }
      if ($device -eq $null) {
      Write-Output "El dispositivo no está conectado o la ruta es incorrecta."
      exit
      } else {
      Write-Output "Dispositivo encontrado: $($device.Name)"
      }
      # Navegar a la raíz del almacenamiento interno del dispositivo
      $internalStorage = $device.GetFolder.Items() | Where-Object { $_.Name -eq "Nombredealmacenamiento" }
      if ($internalStorage -eq $null) {
      Write-Output "No se encontró 'Nombredealmacenamiento'."
      exit
      } else {
      Write-Output "Accediendo a 'Nombredealmacenamiento'."
      }

    • @elespanolinformatico
      @elespanolinformatico  Před 18 dny

      # Obtener el objeto de destino
      $destinationFolder = $shellApp.Namespace($destinationPath)

      # Copiar el archivo al destino
      $destinationFolder.CopyHere($item, 4) # 4 = No mostrar el cuadro de diálogo de progreso

      # Esperar hasta que el archivo aparezca en el destino
      while (-not (Test-Path -Path $destinationFilePath)) {
      Start-Sleep -Milliseconds 100
      }

      Write-Output "Copiado: $fileName"
      Add-Content -Path $logFilePath -Value $fileName

      } catch {
      Write-Output "Error al copiar ${fileName}: $_"
      }
      } else {
      Write-Output "El archivo $fileName ya existe en la carpeta de destino o en la lista de copiados. Omitiendo."
      }
      }
      }
      }
      # Iniciar el proceso en la raíz
      Process-Folder -folder $rootFolder

  • @axelgregorio1468
    @axelgregorio1468 Před dnem +1

    Hola, muy buenas
    Yo tengo un problema con un celular, es un motorola el cual se reinicia constantemente y me pide restaurarlo, el problema es que no tengo copia de seguridad y no quiero perder los archivos, hay un lapso de 20 a 60 segundos en los cuales me deja usar el dispositivo, pero el problema es que no puedo copiar todos los archivos, logre hacer una copia de las fotos con google pero los videos pesan mucho y tarda muchisimo en poder subirlos a la nube
    Quisiera saber si me podrias guiar con algun script para poder mover o copiar un video cada vez que se reinicie el celular y si se reinicia y no termino de moverlo o copiarlo poder seguir copiandolo sin que se reinicie el proceso desde el inicio

    • @elespanolinformatico
      @elespanolinformatico  Před dnem

      Haber hay un script que es que copia directamente al conectarlo el problema que no hubo manera de funcionarlo de forma automatico por que es en base a codigos de eventos, y no me fue bien, Si sigues el script que he puesto y pones el njombre que aparece en tu movil al conectarlo, es decir el nombre de unidad que aparece podrias ejecutarlo y quizas en 60 segundos te copiara cosas, pero claro no le dara tiempo a copiarlo todo. Has probado de encenderlo en modo seguro?

    • @axelgregorio1468
      @axelgregorio1468 Před dnem

      @@elespanolinformaticoIntente en modo seguro pero tampoco me deja usar el dispositivo por un tiempo prolongado, solo un par de segundos y se vuelve a reiniciar
      no existe la posibilidad de que Mueva un solo video cada vez que lo conecte ?
      Para que le de tiempo de moverlo y no lo copie a medias el archivo

    • @elespanolinformatico
      @elespanolinformatico  Před dnem +1

      @@axelgregorio1468 Podemos intentarlo pero podemos tirar por dos sitios. Primero que lo ejecutes cada vez y sin en 30 segundos no dio tiempo, cuando vuelvas a ejecutar el script y conectes el movil de nuevo omita ese archivo porque no da tiempo, o que no copie el siguiente hasta que ese ulitmo no se haya copiado, pero claro en este ultimo caso sino da tiempo no da tiempo nunca , por lo que se podria quedar pillado salvo que tengas suerte y dure mas tiempo encendido. Yo tiraria por que vaya copiando archivo por archivo y si uno en 30 segundos no da tiempo omitirlo. Ten encuenta eso si que el movi cuando lo conectes tienes que estar en modo transferencia que, tal como te enseño en e lvideo, en 30 segundos te daria tiempo de que ajustes de forma automatica que cuando se conecte este al pc entre en modo automatico.
      El script lo que hará es buscar desde la raíz, si crees que estaba todo en dcim y sabes la ruta exacta podríamos simplificar la busqueda poniendo el nombre de la carpeta en concreto y asi quitar codigo. De momento te lo paso desde la raiz y debes modificar tudestino, nombredetumovil, y nombre de almacenamiento. Te paso el script en 2 comentarios ya que en 1 no me deja.

    • @elespanolinformatico
      @elespanolinformatico  Před dnem +1

      # Definir la ruta de destino en tu PC
      $destinationPath = "tudestino"
      $logFilePath = "tudestino\copiedFiles.log"
      # Crear la carpeta de destino si no existe
      if (!(Test-Path -Path $destinationPath)) {
      New-Item -ItemType Directory -Path $destinationPath
      Write-Output "Carpeta de destino creada: $destinationPath"
      } else {
      Write-Output "Carpeta de destino ya existe: $destinationPath"
      }
      # Crear el archivo de registro si no existe
      if (!(Test-Path -Path $logFilePath)) {
      New-Item -ItemType File -Path $logFilePath
      Write-Output "Archivo de registro creado: $logFilePath"
      } else {
      Write-Output "Archivo de registro ya existe: $logFilePath"
      }
      # Cargar los archivos ya copiados desde el archivo de registro
      $copiedFiles = @{}
      if (Test-Path -Path $logFilePath) {
      $copiedFiles = Get-Content -Path $logFilePath | ForEach-Object { $_.Trim() }
      }
      # Utilizar la biblioteca Shell.Application para acceder al dispositivo
      $shellApp = New-Object -ComObject Shell.Application
      # Obtener la colección de dispositivos conectados (Explorador de Windows)
      $devices = $shellApp.Namespace(17) # 17 = Mi PC
      # Buscar el dispositivo móvil
      $device = $devices.Items() | Where-Object { $_.Name -like "*Nombredetumovil*" }
      if ($device -eq $null) {
      Write-Output "El dispositivo no está conectado o la ruta es incorrecta."
      exit
      } else {
      Write-Output "Dispositivo encontrado: $($device.Name)"
      }
      # Navegar a la raíz del almacenamiento interno del dispositivo
      $internalStorage = $device.GetFolder.Items() | Where-Object { $_.Name -eq "Nombredealmacenamiento" }
      if ($internalStorage -eq $null) {
      Write-Output "No se encontró 'Nombredealmacenamiento'."
      exit
      } else {
      Write-Output "Accediendo a 'Nombredealmacenamiento'."
      }
      # Obtener la carpeta raíz
      $rootFolder = $internalStorage.GetFolder()