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

时间:2012-04-17 14:33:59

标签: command-line batch-file copy dos xcopy

我希望在服务器迁移期间做一些大量复制,我需要更好地理解Windows Server中的复制命令。我一直在玩xcopy,但我真的很难理解它。那里有一些好的文献还是有人可以帮我这个?我可以使用其他任何软件或命令吗?

我希望对37个服务器的完整阵列执行此操作,因此我正在寻找有关创建脚本的指导,我可以输入多个目录,以便我可以将其保持运行一段时间。< / p>

到目前为止,这就是我一直在做的事情:

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

它正在工作,但是当我收到错误时它会停止......我不确定我应该为这个项目启动批处理文件的方向。我应该使用变量吗?我应该提示目录吗?什么是“最好的”方式?

任何帮助将不胜感激,谢谢先进!

2 个答案:

答案 0 :(得分:0)

Mechanic1264889,

你在这里有几个不同的问题,我将尝试将它们分开并回答它们。

首先:了解xCopy及其所有触发器。 首先,在命令提示符本身中有一些好的文献:

> xcopy /?

这将为您提供可以使用的可能触发器的列表。

另外,网上有一些很好的文献:xCopy Wiki

在这里,您将找到您要做的事情的示例。

在阅读该信息后,我认为您需要在字符串中包含/ C,以避免在xCopy发现错误时停止。

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

即使发现错误,也会继续。

另外,你有没有尝试过roboCopy?

> robocopy /?

同样,在这里您将获得可能的触发器列表。

以及此链接:roboCopy Wiki

我希望你能在这里找到你想要的东西。

答案 1 :(得分:0)

现在实际解决你的问题。

我的工作也遇到了类似的问题。我实际上开发了一些代码,一次可以使用3个副本(roboCopy或xCopy),并创建脚本供以后使用。

尝试一下,让我知道它是否有效!

@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)