Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для YuS_2

Crazy


Contributor


Сообщения: 1186
Благодарности: 497

Профиль | Отправить PM | Цитировать


Цитата test009:
попробую »
Тут, пока было время, состряпал двусторонний копировщик, может пригодится:
powershell
script.ps1
Код: Выделить весь код
<#
	.SYNOPSIS 
		Отображение или копирование элементов смартфона, подключенного как
		устройство MTP

	.Description
		Скрипт предназначен для выборки, просмотра или копирования элементов 
		смартфона по протоколу MTP 

	.Parameter Phonename
		Обязательный: Имя смартфона так, как оно выглядит в проводнике

	.Parameter Sourcepath
		Необязательный: Путь к элементу.
		В смартфоне: Начиная от корневого так, как он выглядит в проводнике. Например: 
		'Внутренний общий накопитель\temp','Внутренний общий накопитель\temp\example.ext'
		В компьютере: Указываются либо абсолютные, либо относительные пути.
	
	.Parameter Destinationpath
		Необязательный: Путь к целевому каталогу, куда будут копироваться элементы. 

	.Parameter Filter
		Необязательный: Шаблон регулярного выражения (-match), для отбора элементов с
		определенным наименованием. Работает только для файлов первого уровня вложенности
		Например: '(\.pdf|\.txt)$'
		
	.Parameter From
		Переключатель: Для осуществления копирования выборки элементов из смартфона в
		компьютер. При отсутствии, список элементов выводится в консоль.

	.Parameter To
		Переключатель: Для осуществления копирования выборки элементов из компьютера в
		смартфон. При отсутствии, список элементов выводится в консоль.

	.Example
		.\script.ps1 -phone 'Redmi Note 4'

		Это пример просмотра корневого(ых) каталогов смартфона.

	.Example
		.\script.ps1 -phone 'Redmi Note 4'  `
		-sour 'Внутренний общий накопитель\FOLD','Внутренний общий накопитель\temp\example.ext' `
		-dest .\TEST -filt '(\.ext|\.txt|\.jpeg)$|123' -from 

		Это пример выборки элементов из указанного каталога плюс указанный файл (в смартфоне), с 
		применением к выборке фильтра. Вся выборка копируется в целевой каталог компьютера .\TEST
		
	.Example
		.\script.ps1 -phone 'Redmi Note 4'  `
		-sour .\TEST\1111,c:\test\run.bat `
		-dest 'Внутренний общий накопитель\temp' -filt '(\.bat|\.png)$' -to 

		Это пример выборки элементов из указанного каталога плюс указанный файл (в компьютере), с 
		применением к выборке фильтра. Вся выборка копируется в целевой каталог смартфона
		'Внутренний общий накопитель\temp'
		
	.Notes
		Created By YuS

		Version: 1.00
		Date: 15/04/2019
		Purpose/Change:	Первая версия
		Version: 2.00
		Date: 16/04/2019
		Purpose/Change:	Добавлена возможность копирования в обе стороны.
		Version: 2.01
		Date: 17/04/2019
		Purpose/Change:	Удалена лишняя проверка на существование элемента.		
		Version: 2.02
		Date: 08/11/2020
		Purpose/Change:	Поправлены баги с копированием из компьютера на устройство.		

	.Link
		http://forum.oszone.net/post-2867970.html#post2867970
		
#>
  
[cmdletbinding()]
param (
	[parameter(Mandatory=$true)]
	[string]$phonename,[string[]]$sourcepath,[string]$destinationpath,[string]$filter,
	[switch]$from,[switch]$to
)

function get-folder ($paths){
	$cur = $root
	if($paths){
		foreach ($path in $paths){
			$cur = $cur.getfolder.items()|? name -eq $path
		}
	}
	return $cur
}

function get-array ($paths){
	foreach ($path in $paths){
		if (test-path -lit $path -patht leaf){gi $path -force} else {dir $path -force}
	}
}

$shell = new-object -com shell.application

# ssfDRIVES 0x11 (17).
# https://msdn.microsoft.com/en-us/library/windows/desktop/bb774096(v=vs.85).aspx #ссылка устарела
# https://docs.microsoft.com/ru-ru/windows/win32/api/shldisp/ne-shldisp-shellspecialfolderconstants
$root = $shell.namespace(17).self.getfolder.items()|? name -eq $phonename

if (!$destinationpath -and ($to -or $from)){
	write-host Необходимо указать целевой каталог -for cyan
	exit
}

if ($sourcepath -and (test-path $sourcepath) -contains $true){
	if ($from) {
		write-host 'Ключ [-from] указывается только при копировании из смартфона' -for red
		$from = $false
	}
	$items = (get-array $sourcepath)|? name -match $filter
	$destinat = get-folder $($destinationpath.split('\'))
} else {
	if ($to) {
		write-host 'Ключ [-to] указывается только при копировании в смартфон' -for red
		$to = $false
	}
	$sarr = if($sourcepath){$sourcepath|%{get-folder $($_.split('\'))}} else {get-folder}
	$items = $sarr|%{if($_.isfolder){$_.getfolder.items()} else {$_}}|? name -match $filter
}
if (!$items){write-host Элементы для обработки отсутствуют -for yellow;exit}

if ($to){
	$from = $false
	foreach ($item in $items){$destinat.getfolder.copyhere($item.fullname)}
} elseif ($from){
	if (!(test-path $destinationpath)){md $destinationpath|out-null}
	$dst = $shell.namespace((gi $destinationpath).fullname).self
	foreach ($item in $items){$dst.getfolder.copyhere($item)}
} else {
	$items|select name,isfolder,type|sort isfolder,name
}

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 08-11-2020 в 19:08. Причина: обновление скрипта 08.11.20

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:12, 16-04-2019 | #13