Cómo copiar de forma automática fotos del móvil al ordenador
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
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'."
}
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.
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.
# 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 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
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
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?
@@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
@@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.
# 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()