Пакетное копирование файлов в другую папку с перерывами - PullRequest
0 голосов
/ 14 июня 2011

Мне нужен сценарий, предпочтительно пакет Windows или C #, чтобы сделать следующее:

Показать запрос, который сначала запрашивает исходную папку, затем должен запрашивать папку назначения.Наконец, он должен спросить, сколько файлов он должен скопировать в место назначения из источника.

// Мы говорим о приблизительно 100.000 файлах, и их можно перемещать в случайном порядке.

После запуска процесса программа должна сделать перерыв на 10 минут, а затем выполнить циклэто было сказано ранее, в предыдущих ответах на приглашение.


Я немного попробовал, но не нашел решения.Насколько я понимаю, XCOPY не может обойти все эти критерии.

Заранее спасибо, Марк

Ответы [ 5 ]

1 голос
/ 14 июня 2011
  1. RoboCopy (раздел См. Также также может вас заинтересовать) или
  2. (более поздняя версия :) RichCopy (скачать)
1 голос
/ 14 июня 2011

Вы можете использовать что-то вроде этого:

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);
}
0 голосов
/ 14 июня 2011

Не думаю, что я что-то пропустил = 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"
0 голосов
/ 14 июня 2011

Я не уверен, что это соответствует всем вашим требованиям, но может быть полезно взглянуть на robocopy (robocopy /? в командной строке).

0 голосов
/ 14 июня 2011

В C # с использованием System.IO.File.Copy (sourceFileName, destFileName) , за которым следует System.IO.File.Delete (path) выполнит «перемещение» длявы.Вы можете создать простое консольное приложение, которое получит необходимую информацию и затем выполнит свою работу.

Посмотрите документы для System.IO.File для получения дополнительной информации об операциях с файлами.

...