shell32 copyhere 在 .Net 和 powershell 脚本中都不起作用
shell32 copyhere not working neither in .Net nor powershell script
有一个 powershell 脚本可以通过 MTP 以编程方式在 pc 和 android 之间复制文件,请参阅 access-file-system-against-mtp-connection,它在 powershell 控制台下 运行ning 时有效,然后我有编写了如下脚本:
function Usage()
{
echo "Usage:mtpcmd cp srcfile dstfolder"
}
function main
{
param($mainargs)
# echo "args2:$mainargs"
if(-not($mainargs.length -eq 2))
{
Usage
return
}
$srcfile=$mainargs[0]
$dstfolder=$mainargs[1]
$phone = Get-ChildShellItem | where { $_.Path -like '*usb*' }
echo "phonePath:$($phone.Path)"
Copy-ShellItem -Path "$srcfile" -Destination "$($phone.Path)\内部存储$dstfolder"
}
#echo "args1:$args"
main -mainargs $args
此脚本在 powershell 控制台上运行良好 运行,但是当我 运行 它在 cmd 下时
powershell -Files mtpcp.ps1 c:\test \Android\test\
或
powershell ./mtpcp.ps1 c:\test \Android\test\
它什么都不做(没有显示错误)。
然后我在 .Net 上使用 system.Shell32 实现了相同的功能,函数 CopyHere 可以很好地处理像 c:\
这样的常规路径,但不能处理 mtp 设备路径,就像 powershell,它只是在 CopyHere 函数上什么都不做,也没有显示错误消息。
嗯...复制到这里后加一个sleep或者readkey就可以正常使用了
Shell sh = new Shell();
Folder folder = sh.NameSpace(AndroidMTPFiles.GetUsbFolderItem().Path + @"\内部存储\Android\test");
//FolderItem fi = AndroidMTPFiles.GetRegularFileItemByPath(@"c:\test\src");
folder.CopyHere(@"c:\test\src\",16);
sh.Open(folder);
System.Console.ReadKey();
有一个 powershell 脚本可以通过 MTP 以编程方式在 pc 和 android 之间复制文件,请参阅 access-file-system-against-mtp-connection,它在 powershell 控制台下 运行ning 时有效,然后我有编写了如下脚本:
function Usage()
{
echo "Usage:mtpcmd cp srcfile dstfolder"
}
function main
{
param($mainargs)
# echo "args2:$mainargs"
if(-not($mainargs.length -eq 2))
{
Usage
return
}
$srcfile=$mainargs[0]
$dstfolder=$mainargs[1]
$phone = Get-ChildShellItem | where { $_.Path -like '*usb*' }
echo "phonePath:$($phone.Path)"
Copy-ShellItem -Path "$srcfile" -Destination "$($phone.Path)\内部存储$dstfolder"
}
#echo "args1:$args"
main -mainargs $args
此脚本在 powershell 控制台上运行良好 运行,但是当我 运行 它在 cmd 下时
powershell -Files mtpcp.ps1 c:\test \Android\test\
或
powershell ./mtpcp.ps1 c:\test \Android\test\
它什么都不做(没有显示错误)。
然后我在 .Net 上使用 system.Shell32 实现了相同的功能,函数 CopyHere 可以很好地处理像 c:\
这样的常规路径,但不能处理 mtp 设备路径,就像 powershell,它只是在 CopyHere 函数上什么都不做,也没有显示错误消息。
嗯...复制到这里后加一个sleep或者readkey就可以正常使用了
Shell sh = new Shell();
Folder folder = sh.NameSpace(AndroidMTPFiles.GetUsbFolderItem().Path + @"\内部存储\Android\test");
//FolderItem fi = AndroidMTPFiles.GetRegularFileItemByPath(@"c:\test\src");
folder.CopyHere(@"c:\test\src\",16);
sh.Open(folder);
System.Console.ReadKey();