1

プログラムで MTP を介して PC と Android の間でファイルをコピーするための PowerShell スクリプトがあります

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\

何もしません(エラーは表示されません)。

次に、system.Shell32を使用して.Netに同じ関数を実装しました.CopyHere関数は通常のパスのように正常に動作しますが、powershellのようc:\にmtpデバイスパスでは動作しません.CopyHere関数では何もしません.エラーメッセージもありません.現れた。

4

1 に答える 1

0

まあ...ここにコピーした後にスリープキーまたはリードキーを追加するだけで、正常に動作します。

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();
于 2016-11-23T09:56:34.893 に答える