contract BatchTransfer {
    /// @notice Tokens on the given ERC-721 contract are transferred from you to a recipient.
    ///         Don't forget to execute setApprovalForAll first to authorize this contract.
    /// @param  tokenContract An ERC-721 contract
    /// @param  recipient     Who gets the tokens?
    /// @param  tokenIds      Which token IDs are transferred?
    function batchTransfer(ERC721Partial tokenContract, address recipient, uint256[] calldata tokenIds) external {
        for (uint256 index; index < tokenIds.length; index++) {
            tokenContract.transferFrom(msg.sender, recipient, tokenIds[index]);
        }
    }
}
function batchTransfer(ERC721Partial tokenContract, address recipient, uint256[] calldata tokenIds) external {
    for (uint256 index; index < tokenIds.length; index++) {
        tokenContract.transferFrom(msg.sender, recipient, tokenIds[index]);
    }
}

/// @notice Tokens on the given ERC-721 contract are transferred from you to a recipient.
///         Don't forget to execute setApprovalForAll first to authorize this contract.
/// @param  tokenContract An ERC-721 contract
/// @param  recipient     Who gets the tokens?
/// @param  tokenIds      Which token IDs are transferred?