Is there an any way to use batching with UV tiling?

Hey. I will have a lot of object (1000+) in the scene with the same material but different tiling values. I have created a shader for it in the shader graph and assign a script with MaterialPropertyBlock to change tiling. Everything is working fine except the batching. Is there an any way to have 1 batch for 1000 objects with the same material but different tiling values? Thanks!

UPDATE:
I have found this Unity - Manual: GPU instancing? but have no idea how to right this type of shader with texture and tiling instead of color

Guy with nickname fiveampsoftware shared with me this shader

Shader "Test/TestShader"
{
    Properties
    {
        _MainTex ("MainTexture", 2D) = "white" {}
        _MainScaleOffset ("Main Scale (XY) Offset (ZW)", Vector) = (1,1,0,0)
    }
    SubShader
    {
        Tags
        {
            "RenderType"="Opaque"
        }
        LOD 200
 
        CGPROGRAM
        #pragma surface surf Lambert
        sampler2D _MainTex;
 
        UNITY_INSTANCING_BUFFER_START(Props)
        UNITY_DEFINE_INSTANCED_PROP(float4, _MainScaleOffset)
        UNITY_INSTANCING_BUFFER_END(Props)
 
        struct Input
        {
            float2 uv_MainTex;
        };
 
        void surf(Input IN, inout SurfaceOutput o)
        {
            float4 scaleOffset = UNITY_ACCESS_INSTANCED_PROP(Props, _MainScaleOffset);
            float2 uv = IN.uv_MainTex * scaleOffset.xy + scaleOffset.zw;
            o.Albedo = tex2D(_MainTex, uv).rgb;
        }
        ENDCG
    }
    FallBack "Mobile/Diffuse"
}

I have used GPU Instancing and this code

    [SerializeField]
    private Vector4 _size;
    
    private MaterialPropertyBlock _myMatBlock;
    void Start()
    {
        _myMatBlock = new MaterialPropertyBlock();
        _myMatBlock.SetVector("_MainScaleOffset", new Vector4(_size.x,_size.y , _size.z, _size.w)); 
        GetComponent<MeshRenderer>().SetPropertyBlock(_myMatBlock);
    }