简体   繁体   English

批处理文件,用于复制文件

[英]Batch file for copying files

I'm looking to do some massive copy's during a server migration and I need to better understand the copy commands in Windows Server. 我正在寻找在服务器迁移期间进行大量复制的过程,我需要更好地了解Windows Server中的复制命令。 I've been toying with xcopy, but I really am having a difficult time understanding it fully. 我一直在玩xcopy,但是我真的很难完全理解它。 Is there some good literature out there or can anyone help me with this? 有一些好的文献吗,或者有人可以帮助我吗? Is there any other software or commands I could use? 我还可以使用其他软件或命令吗?

I'm looking to do this to a full array of 37 servers, so I'm looking for guidance on creating a script I can input multiple directories into so that I can leave this running for as long as it takes. 我正在尝试对37个服务器的整个阵列执行此操作,因此我正在寻找有关创建脚本的指南,该脚本可以将多个目录输入其中,以便我可以在需要的时间内保持运行状态。

So far this is what I've been doing: 到目前为止,这是我一直在做的事情:

xcopy C:\Directory\*.* \\Server\Directory\*.* /S /V

It's working, but when I get an error it stops... and I'm not really sure the direction I should go for starting up a batch file for this project. 它正在工作,但是当我收到错误消息时,它停止了……而且我不太确定为该项目启动批处理文件的方向。 Should I use variables? 我应该使用变量吗? Should I prompt for the directories? 我应该提示输入目录吗? What's the "best" way? 什么是“最佳”方式?

Any help would be appreciated, thanks in advanced! 任何帮助将不胜感激,谢谢先进!

Mechanic1264889, 机械师1264889,

You have a couple of different questions here, I'm going to try to split them up and answer them. 您在这里有几个不同的问题,我将尝试将其分解并回答。

First: Understanding xCopy and all of it's triggers. 首先:了解xCopy及其所有触发器。 There is some good literature, first of all, in the command prompt itself: 首先,在命令提示符本身中有一些不错的文献:

> xcopy /?

This will get you a list of the possible triggers you can use. 这将为您提供可以使用的可能触发器的列表。

Else, there is some good literature on the net: xCopy Wiki 否则,网上有一些不错的文献: xCopy Wiki

Here you will find examples of what you're trying to do. 在这里,您将找到您想要做的事的例子。

After reading that information, I believe you need to include /C in your string to avoid stopping when your xCopy finds an error. 阅读该信息后,我相信您需要在字符串中包含/ C以避免xCopy发现错误时停止。

xcopy C:\Directory\*.* \\Server\Directory\*.* /S /V /C

This will continue even if it finds an error. 即使发现错误,此操作也将继续。

Also, have you tried roboCopy yet? 另外,您是否尝试过roboCopy?

> robocopy /?

Again, here you will get a list of possible triggers. 同样,在这里您将获得可能的触发器列表。

As well as this link: roboCopy Wiki 以及此链接: roboCopy Wiki

I hope that you find what you're looking for here. 希望您在这里找到想要的东西。

Now on to actually solving what you're asking. 现在开始实际解决您的要求。

I have run into a similar problem at my work as well. 我的工作也遇到了类似的问题。 I've actually developed some code that can take 3 copies at a time (either roboCopy or xCopy) and will create the script for later use. 实际上,我已经开发了一些代码,一次可以复制3个副本(roboCopy或xCopy),并将创建脚本供以后使用。

Try this out and let me know if it works! 试试看,让我知道它是否有效!

@ECHO OFF
COLOR 0A
TITLE product_X Migration Copy Tool

echo.This script should always be run FROM the Source Machine
echo.
choice /C:RX /N /M "(R)RoboCopy or (X)Xcopy:" 
IF '%ERRORLEVEL%'=='1' set copyMode=Robo
IF '%ERRORLEVEL%'=='2' set copyMode=X

cls
echo.Are you using UNC paths?
choice /C:YN /N /M "(Y)Yes or (N)No"
IF '%ERRORLEVEL%'=='1' set UNC=UNC
IF '%UNC%'=='UNC' GOTO regEdit
IF '%ERRORLEVEL%'=='2'  set UNC=drive
IF '%UNC%'=='drive' GOTO SourceDrive1

:SourceDrive1
cls
IF /I '%source1Error%'=='T' echo.Location does not exist, try again...
IF /I '%source1Error%'=='T' echo.
set source1Error=F
echo._.-*Set your FIRST copy source/destination*-._
echo.
set SourceDrive1=
set /p SourceDrive1=What is the Local folder you want to copy from?: 
IF NOT DEFINED SourceDrive1 set source1Error=T
IF /I '%source1Error%'=='T' GOTO SourceDrive1
echo.

:destDrive1
echo.
echo.What is the %UNC% location you want to copy %sourceDrive1% to?
set dest1Error=F
set destDrive1=
IF '%UNC%'=='UNC' echo.(Make sure you include the '\\' before your location)
set /p destDrive1=: 
IF NOT DEFINED destDrive1 set dest1Error=T
IF /I '%dest1Error%'=='T' echo.Location does not exist, try again...
IF /I '%dest1Error%'=='T' GOTO destDrive1
cls
verify >nul
echo.You will perform a %copyMode%Copy on %SourceDrive1%\*.* to %destDrive1%\*.*
echo.
echo.Is this correct?
echo.(If you choose (Z)Done you will move on to start %copyMode%Copying)
echo.
choice /C:YNXZ /N /M "(Y)Yes, (N)No, (X)Back or (Z)Done:" 
IF '%ERRORLEVEL%'=='1' GOTO SourceDrive2
IF '%ERRORLEVEL%'=='2' GOTO destDrive1
IF '%ERRORLEVEL%'=='3' GOTO SourceDrive1
IF '%ERRORLEVEL%'=='4' set allDone=1
IF '%ERRORLEVEL%'=='4' GOTO finalWarning

:SourceDrive2
cls
IF /I '%source2Error%'=='T' echo.Location does not exist, try again...
IF /I '%source2Error%'=='T' echo.
set source2Error=F
echo._.-*Set your SECOND copy source/destination*-._
echo.
set SourceDrive2=
set /p SourceDrive2=What is the next Local folder you want to copy from?: 
IF NOT DEFINED SourceDrive2 set source2Error=T
IF /I '%source2Error%'=='T' GOTO SourceDrive2
echo.

:destDrive2
echo.
echo.What is the %UNC% location you want to copy %SourceDrive2% to?
set dest2Error=F
set destDrive2=
IF '%UNC%'=='UNC' echo.(Make sure you include the '\\' before your location)
set /p destDrive2=: 
IF NOT DEFINED destDrive2 set dest2Error=T
IF /I '%dest2Error%'=='T' echo.Location does not exist, try again...
IF /I '%dest2Error%'=='T GOTO destDrive2
cls
verify >nul
echo.You will perform a %copyMode%Copy on %SourceDrive2%\*.* to %destDrive2%\*.*
echo.
echo.Is this correct?
echo.(If you choose (Z)Done you will move on to start %copyMode%Copying)
echo.
choice /C:YNXZ /N /M "(Y)Yes, (N)No, (X)Back or (Z)Done:" 
IF '%ERRORLEVEL%'=='1' GOTO SourceDrive3
IF '%ERRORLEVEL%'=='2' GOTO destDrive2
IF '%ERRORLEVEL%'=='3' GOTO SourceDrive1
IF '%ERRORLEVEL%'=='4' set allDone=2
IF '%ERRORLEVEL%'=='4' GOTO finalWarning

:SourceDrive3
cls
IF /I '%source3Error%'=='T' echo.Location does not exist, try again...
IF /I '%source3Error%'=='T' echo.
set source3Error=F
echo._.-*Set your SECOND copy source/destination*-._
echo.
set SourceDrive3=
set /p SourceDrive3=What is the last Local folder you want to copy from?: 
IF NOT DEFINED SourceDrive3 set source3Error=T
IF /I '%source3Error%'=='T' GOTO SourceDrive3
echo.

:destDrive3
echo.
echo.What is the %UNC% location you want to copy %SourceDrive3% to?
set dest3Error=F
set destDrive3=
IF '%UNC%'=='UNC' echo.(Make sure you include the '\\' before your location)
set /p destDrive3=: 
IF NOT DEFINED destDrive3 set dest3Error=T
IF /I '%dest3Error%'=='T' echo.Location does not exist, try again...
IF /I '%dest3Error%'=='T' GOTO destDrive3
cls
verify >nul
echo.You will perform a %copyMode%Copy on %SourceDrive3%\*.* to %destDrive3%\*.*
echo.
echo.Is this correct?
choice /C:YNX /N /M "(Y)Yes, (N)No or (X)Back"
IF '%ERRORLEVEL%'=='1' GOTO finalWarning
IF '%ERRORLEVEL%'=='2' GOTO destDrive3
IF '%ERRORLEVEL%'=='3' GOTO SourceDrive2

:finalWarning
cls
echo.
echo.             * * * WARNING * * *
echo.This will execute with the following variables
echo.
echo.%copyMode%Copy:
echo.%SourceDrive1%\*.* to %destDrive1%\*.*
echo.
IF '%allDone%'=='1' GOTO questionWarning
echo.%SourceDrive2%\*.* to %destDrive2%\*.*
echo.
IF '%allDone%'=='2' GOTO questionWarning
echo.%SourceDrive3%\*.* to %destDrive3%\*.*
echo.

:questionWarning
echo.Do you want to SAVE your config to use later?
echo.
echo.Select Yes to start, No to go to the beginning or Back to go back one step
choice /C:YNX /N /M "(Y)Yes, (N)No or (X)Back"
IF '%ERRORLEVEL%'=='1' set copyConfig=Y
IF '%ERRORLEVEL%'=='2' set copyConfig=N
IF '%ERRORLEVEL%'=='3' GOTO SourceDrive3
cls
IF /I '%copyConfig%'=='Y' goto saveConfig
IF /I '%copyConfig%'=='N' goto SourceDrive1

:preStart
FOR /F %%A IN ('TIME/T') DO SET time=%%A
FOR /F "tokens=1-4 delims=/ " %%B IN ('DATE /t') DO SET date=%%C/%%D/%%E
echo.
echo.Do you want to start %copyMode%Copying?
echo.Select Yes to start, No to go to the beginning or Back to go back one step
choice /C:YNX /N /M "(Y)Yes, (N)No or (X)Back"
IF '%ERRORLEVEL%'=='1' GOTO start
IF '%ERRORLEVEL%'=='2' GOTO SourceDrive1
IF '%ERRORLEVEL%'=='3' GOTO questionWarning

:start
IF NOT EXIST C:\TEMP\product_X\TEMP MD C:\TEMP\product_X\TEMP
echo.%date% -%time% - %copyMode%Copy Started>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
cls
echo.Running...
IF /I '%copyConfig%'=='Y' explorer.exe C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\
IF /I '%copyMode%'=='robo' goto roboCopy
IF /I '%copyMode%'=='X' goto xCopy

:xCopy
REM xcopy Source Destination /TRIGGERS
IF NOT EXIST %destDrive1% MD %destDrive1%
echo.%date% -%time% - %SourceDrive1%\*.* - to - %destDrive1%\*.*>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
xcopy %SourceDrive1%\*.* %destDrive1%\*.* /d /e /c /r /y

IF '%allDone%'=='1' GOTO end
IF NOT EXIST %destDrive2% MD %destDrive2%
echo.%date% -%time% - %SourceDrive2%\*.* - to - %destDrive2%\*.*>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
xcopy %SourceDrive2%\*.* %destDrive2%\*.*  /d /e /c /r /y

IF '%allDone%'=='2' GOTO end
IF NOT EXIST %destDrive3% MD %destDrive3%
echo.%date% -%time% - %SourceDrive3%\*.* - to - %destDrive3%\*.*>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
xcopy %SourceDrive3%\*.* %destDrive3%\*.*  /d /e /c /r /y

:roboCopy
IF NOT EXIST %destDrive1% MD %destDrive1%
IF NOT EXIST %destDrive1%\RoboCopy_Logfile MD %destDrive1%\RoboCopy_Logfile
echo.%date% -%time% - %SourceDrive1%\*.* - to - %destDrive1%\*.*>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
robocopy %SourceDrive1%\*.* %destDrive1%\*.* /R:5 /W:3 /Z /XX /TEE /LOG+:%destDrive1%\RoboCopy_Logfile\%destDrive1%_Log.txt

IF '%allDone%'=='1' GOTO end
IF NOT EXIST %destDrive2% MD %destDrive2%
IF NOT EXIST %destDrive2%\RoboCopy_Logfile MD %destDrive2%\RoboCopy_Logfile
echo.%date% -%time% - %SourceDrive2%\*.* - to - %destDrive2%\*.*>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
robocopy %SourceDrive2%\*.* %destDrive2%\*.* /R:5 /W:3 /Z /XX /TEE /LOG+:%destDrive2%\RoboCopy_Logfile\%destDrive2%_Log.txt

IF '%allDone%'=='2' GOTO end
IF NOT EXIST %destDrive3% MD %destDrive3%
IF NOT EXIST %destDrive3%\RoboCopy_Logfile MD %destDrive3%\RoboCopy_Logfile
echo.%date% -%time% - %SourceDrive3%\*.* - to - %destDrive3%\*.*>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
robocopy %SourceDrive3%\*.* %destDrive3%\*.* /R:5 /W:3 /Z /XX /TEE /LOG+:%destDrive3%\RoboCopy_Logfile\%destDrive3%_Log.txt
GOTO end

:regEdit
IF NOT EXIST C:\TEMP\product_X MD C:\TEMP\product_X
echo.Windows Registry Editor Version 5.00> C:\TEMP\product_X\DisableUNCCheck.reg
echo.;>> C:\TEMP\product_X\DisableUNCCheck.reg
echo.[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]>> C:\TEMP\product_X\DisableUNCCheck.reg
echo."DisableUNCCheck"=dword:00000001>> C:\TEMP\product_X\DisableUNCCheck.reg
regedit /s C:\TEMP\product_X\DisableUNCCheck.reg
GOTO SourceDrive1

:end
echo.%copyMode%Copy Completed
echo.%date% -%time% - %copyMode%Copy Ended>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
echo.---------------------------------------------------------------->>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
echo.>>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt
pause
exit

:saveConfig
FOR /F "tokens=1-2 delims=: " %%B IN ('TIME /t') DO SET time=%%B%%C
FOR /F "tokens=1-4 delims=/ " %%B IN ('DATE /t') DO SET date=%%C%%D%%E
IF /I '%copyMode%'=='robo' goto roboCopySave
IF /I '%copyMode%'=='X' goto xCopySave

:xCopySave
IF NOT EXIST C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves MD C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves

echo.IF NOT EXIST %destDrive1% MD %destDrive1%>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.Saving file: C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat

echo.echo.%%date%% - %%time%% - %SourceDrive1%\*.* - to - %destDrive1%\*.*^>^>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.xcopy %SourceDrive1%\*.* %destDrive1%\*.* /d /e /c /r /y>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat

IF '%allDone%'=='1' GOTO preStart
echo.echo.IF NOT EXIST %destDrive2% MD %destDrive2%>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.%%date%% - %%time%% - %SourceDrive2%\*.* - to - %destDrive2%\*.*^>^>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.xcopy %SourceDrive2%\*.* %destDrive2%\*.* /d /e /c /r /y>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat

IF '%allDone%'=='2' GOTO preStart
echo.echo.IF NOT EXIST %destDrive3% MD %destDrive3%>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.%%date%% - %%time%% - %SourceDrive3%\*.* - to - %destDrive3%\*.*^>^>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.xcopy %SourceDrive3%\*.* %destDrive3%\*.* /d /e /c /r /y>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
GOTO preStart

:roboCopySave
IF NOT EXIST C:\TEMP\product_X\%copyMode%Copy_Saves MD C:\TEMP\product_X\%copyMode%Copy_Saves

echo.IF NOT EXIST %destDrive1% MD %destDrive1%>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.Saving file: C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat

echo.IF NOT EXIST %destDrive1%\RoboCopy_Logfile MD %destDrive1%\RoboCopy_Logfile>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.%%date%% - %%time%% - %SourceDrive1%\*.* - to - %destDrive1%\*.*^>^>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.robocopy %SourceDrive1%\*.* %destDrive1%\*.* /R:5 /W:3 /Z /XX /TEE /LOG+:%destDrive1%\RoboCopy_Logfile\%destDrive1%_Log.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat

IF '%allDone%'=='1' GOTO preStart
echo.IF NOT EXIST %destDrive2% MD %destDrive2%>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.IF NOT EXIST %destDrive2%\RoboCopy_Logfile MD %destDrive2%\RoboCopy_Logfile>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.%%date%% - %%time%% - %SourceDrive2%\*.* - to - %destDrive2%\*.*^>^>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.robocopy %SourceDrive2%\*.* %destDrive2%\*.* /R:5 /W:3 /Z /XX /TEE /LOG+:%destDrive2%\RoboCopy_Logfile\%destDrive2%_Log.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat

IF '%allDone%'=='2' GOTO preStart
echo.IF NOT EXIST %destDrive3% MD %destDrive3%>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.IF NOT EXIST %destDrive3%\RoboCopy_Logfile MD %destDrive3%\RoboCopy_Logfile>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.echo.%%date%% - %%time%% - %SourceDrive3%\*.* - to - %destDrive3%\*.*^>^>C:\TEMP\product_X\TEMP\product_X_Migration_%copyMode%Copy.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
echo.robocopy %SourceDrive3%\*.* %destDrive3%\*.* /R:5 /W:3 /Z /XX /TEE /LOG+:%destDrive3%\RoboCopy_Logfile\%destDrive3%_Log.txt>>C:\TEMP\product_X\Data_Migration\%copyMode%Copy_Saves\%date%_%time%_%copyMode%Copy.bat
GOTO preStart


REM product_X Install Batch Script
REM Created by Trevor Giannetti
REM An unpublished work
REM (March 2012)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM