批量将文件复制到具有中断的另一个文件夹

时间:2011-06-14 12:17:21

标签: c# windows batch-file file-transfer

我需要一个脚本,最好是Windows批处理或C#,如下所示:

显示首先要求输入源文件夹的提示, 那么它应该要求目标文件夹。最后,它应该从源头询问应该将多少文件复制到目的地。

//我们谈论aprox 100.000文件,它们可以按随机顺序移动。

程序运行完毕后,程序应中断10分钟,然后通过之前的提示答案循环通知之前的程序。


我尝试过一点,但还没有找到解决方案。据我所知,XCOPY无法解决所有这些问题。

提前致谢, 标记

5 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

string source  = Console.ReadLine();
string destination = Console.ReadLine();
int numberOfFilesToCopy = int.Parse(Console.ReadLine());

DirectoryInfo di = new DirectoryInfo(source);
var files = di.GetFiles();
for(i=0;i < math.Max(files.Length, numberOfFilesToCopy);i++)
{
    files[i].CopyTo(destination);
}

答案 1 :(得分:1)

  1. RoboCopySee also部分也可能对您感兴趣)或
  2. (更近期:) RichCopy(下载)

答案 2 :(得分:0)

在C#中使用System.IO.File.Copy(sourceFileName,destFileName)后跟System.IO.File.Delete(path)将为您执行“移动”。您可以创建一个简单的控制台应用程序,其中包含您需要的信息,然后完成工作。

有关文件操作的详细信息,请查看System.IO.File的文档。

答案 3 :(得分:0)

我不确定这是否符合您的所有要求,但在命令行中查看robocopy(robocopy /?)可能会有用。

答案 4 :(得分:0)

不要以为我错过了什么= D

@ECHO OFF
::User Prompts
SET /p source=Source Folder? Use format DRIVE:\PATH\    :
SET /p destination=Destination Folder?  Use format DRIVE:\PATH\    :
SET /p count=How many files to copy?    :

::Setup the Batch file to schedule
DIR /B "%source%">>"%userprofile%\batchtemp\source.BAT"
SET batchfile=%userprofile%\batchtemp\source.BAT
ECHO SETLOCAL ENABLEDELAYEDEXPANSION>>"%batchfile%"
ECHO FOR /F "USEBACKQ tokens=*" %%A IN ("%batchfile%") DO ( >>"%batchfile%"
ECHO  COPY /Y "%%~fA" "%destination%\%%~nxA">>"%batchfile%"
ECHO  SET /a count=!count!-1>>"%batchfile%"
ECHO  IF %count% EQU 0 GOTO CLEANUP>>"%batchfile%"
ECHO )>>"%batchfile%"
ECHO :CLEANUP>>"%batchfile%"
ECHO ENDLOCAL>>"%batchfile%"

::Setup the scheduled task based on a future time in minutes.
REM Given that the job will run on the same day not overlapping a 24 hour day

FOR /F "tokens=1-3 delims=: " %%F IN ('time /t') DO (
 SET hours=%%F
 SET minutes=%%G
)
FOR /F "tokens=1-4 delims=/ " %%F IN ('date /t') DO (
 SET day=%%F 
 SET thedate=%%G/%%H/%%I
)

SET /a minutes=%minutes%+10
IF %minutes% GRT 60 SET /a minutes=%minutes%-60 & SET /a hours=%hours%+1
SCHTASKS /Create /TR "%batchfile%" /ST %hours%:%minutes%:00 /MO ONCE /D %day% /SD "%thedate%" /ED "%thedate%" /TN "Copy Files"