Do you have any programming experience in any language?
I don't recommend .bat files. Powershell has more features and the experience will position you better for future support tasks. Here is a great document to help you get started.
https://www.sapien.com/books_training/Windows-PowerShell-4
The Microsoft documentation is here.
https://learn.microsoft.com/en-us/powershell/scripting/overview?view=powershell-5.1
In Powershell scripts, you can call executables like xcopy.exe or you can user cmdlet's like Copy-Item.
Let's start by considering how your script will function. You posted:
xcopy "C:\Users\James\Work Files\Updated File.xlsx" "\\PC NAME\c$\Users\Marco\Desktop"
xcopy "C:\Users\James\Work Files\Updated File.xlsx" "\\TeamServ1\c$\Users\Marco\Desktop"
It would appear that you have 2 classes of machines, end users desktops and multi-user servers. So for desktops you need "PC NAME", and you also need "Marco". Unless everyone in your organization is named Marco! On multi-user servers, you have the same issue. But it's one machine name and many user names.
I doubt very much that you will want to type in multiple machine names plus the user names. So the preferred method would be to read in a .CSV file and process it.
Before we write any code, we need to understand what data you have access to. Do you have a list of every user on every machine that the file needs to be distributed to? That simplifies the code if you can generate a .CSV file that contains 2 columns, MachineName and UserName.
If you only have the machine name, we can programatically look for user names, but we will want to exclude IIS worker process names and other local accounts that do not apply. Do your users already have the file on their desktop? If so, we can test to see if the file exists and just replace it. But you also have have the problem of what to do if the file is in use and the copy fails.
I can help you write the script, but I will need more info on your environment.