Check multiple servers for a directory existence and copy it - batch-file

Currently, I have the following batch script which copies the file MyFile1.accdb to C:\Computer:
xcopy "\\serverA\Folder1\FolderInside\MyFile1.accdb" "C:\Computer\" /Y
I would like to add various servers to this script, and have it copy only if the directory exists, (ignore the others).
How can I add the following and create an if then statement?
xcopy "\\serverB\Folder1\FolderInside\MyFile1.accdb" "C:\Computer\" /Y
xcopy "\\serverC\Folder1\FolderInside\MyFile1.accdb" "C:\Computer\" /Y
xcopy "\\serverD\Folder1\FolderInside\MyFile1.accdb" "C:\Computer\" /Y
e.g.
If serverB exists copy ...
If serverC exists copy ...

Related

Batch script - check to see if file exists from previous iteration, if not process [duplicate]

I have to create a .BAT file that does this:
If C:\myprogram\sync\data.handler exists, exit;
If C:\myprogram\html\data.sql does not exist, exit;
In C:\myprogram\sync\ delete all files and folders except (test, test3 and test2)
Copy C:\myprogram\html\data.sql to C:\myprogram\sync\
Call other batch file with option sync.bat myprogram.ini.
If it was in the Bash environment it was easy for me, but I do not know how to test if a file or folder exists and if it is a file or folder.
You can use IF EXIST to check for a file:
IF EXIST "filename" (
REM Do one thing
) ELSE (
REM Do another thing
)
If you do not need an "else", you can do something like this:
set __myVariable=
IF EXIST "C:\folder with space\myfile.txt" set __myVariable=C:\folder with space\myfile.txt
IF EXIST "C:\some other folder with space\myfile.txt" set __myVariable=C:\some other folder with space\myfile.txt
set __myVariable=
Here's a working example of searching for a file or a folder:
REM setup
echo "some text" > filename
mkdir "foldername"
REM finds file
IF EXIST "filename" (
ECHO file filename exists
) ELSE (
ECHO file filename does not exist
)
REM does not find file
IF EXIST "filename2.txt" (
ECHO file filename2.txt exists
) ELSE (
ECHO file filename2.txt does not exist
)
REM folders must have a trailing backslash
REM finds folder
IF EXIST "foldername\" (
ECHO folder foldername exists
) ELSE (
ECHO folder foldername does not exist
)
REM does not find folder
IF EXIST "filename\" (
ECHO folder filename exists
) ELSE (
ECHO folder filename does not exist
)
Here is a good example on how to do a command if a file does or does not exist:
if exist C:\myprogram\sync\data.handler echo Now Exiting && Exit
if not exist C:\myprogram\html\data.sql Exit
We will take those three files and put it in a temporary place. After deleting the folder, it will restore those three files.
xcopy "test" "C:\temp"
xcopy "test2" "C:\temp"
del C:\myprogram\sync\
xcopy "C:\temp" "test"
xcopy "C:\temp" "test2"
del "c:\temp"
Use the XCOPY command:
xcopy "C:\myprogram\html\data.sql" /c /d /h /e /i /y "C:\myprogram\sync\"
I will explain what the /c /d /h /e /i /y means:
/C Continues copying even if errors occur.
/D:m-d-y Copies files changed on or after the specified date.
If no date is given, copies only those files whose
source time is newer than the destination time.
/H Copies hidden and system files also.
/E Copies directories and subdirectories, including empty ones.
Same as /S /E. May be used to modify /T.
/T Creates directory structure, but does not copy files. Does not
include empty directories or subdirectories. /T /E includes
/I If destination does not exist and copying more than one file,
assumes that destination must be a directory.
/Y Suppresses prompting to confirm you want to overwrite an
existing destination file.
`To see all the commands type`xcopy /? in cmd
Call other batch file with option sync.bat myprogram.ini.
I am not sure what you mean by this, but if you just want to open both of these files you just put the path of the file like
Path/sync.bat
Path/myprogram.ini
If it was in the Bash environment it was easy for me, but I do not
know how to test if a file or folder exists and if it is a file or
folder.
You are using a batch file. You mentioned earlier you have to create a .bat file to use this:
I have to create a .BAT file that does this:
Type IF /? to get help about if, it clearly explains how to use IF EXIST.
To delete a complete tree except some folders, see the answer of this question: Windows batch script to delete everything in a folder except one
Finally copying just means calling COPY and calling another bat file can be done like this:
MYOTHERBATFILE.BAT sync.bat myprogram.ini

Xcopy is missing parameters and will not copy files

I am trying to make a .bat file that will copy another batch file to the windows start up directory. but XCOPY keeps saying it is missing parameters, can you have a look at my code and see where I'm going wrong.
xcopy "c:\Desktop\CHAOSCOPY.bat" *.* "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"
xcopy "c:\Desktop\CHAOS V2.bat" *.* "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"
xcopy "c:\Desktop\CHAOS.bat" *.* "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\"
xcopy syntax is
xcopy sourcedecription destinationdescription
(disregarding any switches)
What is your code supposed to do? Is "c:\Desktop\CHAOSCOPY.bat" a file you want to copy? If so, copy it to where? What has *.* got to do with the matter? It specifies all files with an extension. Do you want to copy all files with an extension from the current directory and also "c:\Desktop\CHAOSCOPY.bat" to the destination? If so, you need two separate xcopy commands. cmd cannot read your mind - it can't tell which of the three parameters is source and which destination.

.bat file autocopy - how to only copy file once?

I want a .bat file that will copy all files and folders from one folder to another folder automatically. For example:
robocopy "c:\source" "D:\target" /e /MON:1 /xc /xn /xo
However I need it so that once a file has been copied, that file will not be copied again, even if the copy has been moved to a different directory. Is there any way to do this? Is it possible for robocopy to create a log and check against that before copying the file?
If robocopy can't do it, what can?
Use additionally the option /M on your robocopy (SS64 article) command line as suggested by Stephan because this option results in copying only files with archive attribute set in source folder tree and removing archive attribute by robocopy after successful copying the file.
%SystemRoot%\System32\robocopy.exe "C:\source" "D:\target" /M /E /MON:1 /XC /XN /XO
The archive attribute is automatically set again on file modification.
You could perhaps also use xcopy (SS64 article):
%SystemRoot%\System32\xcopy.exe "C:\source" "D:\target\" /M /E /C /I /Q /G /H /R /K /Y >nul
Important for your task is again option /M for copying only files with archive attribute set in source folder tree and clearing the archive attribute after copying the file.
Note: /I works without user prompt only with target folder path ending with a backslash.
Run in a command prompt window robocopy /? respectively xcopy /? for details on the other options or read the Microsoft documentations for robocopy and xcopy.
Alright So, the easiest way to do this is to copy each
file and folder individually, to said folder.
This may not be what you are looking for, but
I hope it helps! Sadly there is no way to
copy l files folders with a single command.

Copy all files and folders inside specific folder in batch file

i have a batch script that i want it to copy everything inside a specific folder to another but it only copy files it doesn't copy the sub folders.
thanks in advance
Here is how im copying the inside of the folder:
xcopy /s %FILETOZIP% %TEMPDIR%
Using XCOPY, the parameters should be at the end:
XCOPY source [destination] [options]
If any folders are empty and you want to include them, you will need the /E parameter instead.
Try the following to capture the entire directory structure:
xcopy %FILETOZIP% %TEMPDIR% /s /e

Use batch script to copy directory

I want to copy a folder to the same directory and change its name. Let's say, if I have a folder "C:\Users\Desktop\A", how can I copy it, rename it as "B", and still put it at "C:\Users\Desktop"?
Thanks.
xcopy "C:\Users\Desktop\A" "C:\Users\Desktop\B" /e /i
From the command prompt
xcopy source target /E
/E recursivly copies files and directories.
So:
xcopy c:\users\Desktop\A c:\users\Desktop\B /E

Resources