Как переместить файлы из одного каталога в другой в зависимости от размера файла - PullRequest
0 голосов
/ 11 августа 2011

В настоящее время я работаю над проектом автоматизации на работе.Один из шагов к программе, который мне нужен, чтобы отделить файлы размером более 6000 КБ от других файлов в папке.Я ищу командный файл, который может перемещать файлы размером более 6000 КБ из их текущего каталога в другой каталог.Мне нужен этот пакетный файл для обработки пакета файлов, а не только одного.Любые мысли о том, как сделать это в командном файле?

Ответы [ 3 ]

2 голосов
/ 11 августа 2011
ROBOCOPY c:\From c:\To /E /MOVE /MIN:6144000  /MT:32

Замените пути "c: \ From" и "c: \ To" на ваши реальные пути к файлам

/MIN:n: минимальный размер файла - исключите файлы размером менее n байт.

/MT[:n]: многопоточное копирование, n = нет.используемых потоков (1-128) ### default = 8 потоков, несовместимых с / IPG и / EFSRAW для Windows7

/E: копировать подпапки, включая пустые подпапки.

/S: копировать подпапки.

Robocopy - это стандартная команда Windows7 , которую можно использовать в Windowx XP , загрузить и установить Microsoft Resource Kit

Подробности и другие параметры для Robocopy здесь

2 голосов
/ 12 августа 2011

Если вы хотите использовать VBScript, вы можете использовать этот сценарий в качестве основы:

' use a default source path or get one from the command line parameters
dim sourcepath: sourcepath = "some\default\path"
if WScript.Arguments.Named.Exists("source") then
    sourcepath = WScript.Arguments.Named("source")
end if

' use a default destination path or get one from the command line
dim destinationpath: destinationpath = "some\default\path"
if WScript.Arguments.Named.Exists("destination") then
    destinationpath = WScript.Arguments.Named("destination")
end if

' use a default file size limit or get one from the command line
' we accept in kbytes so we convert this to bytes
dim sizelimit: sizelimit = 6000 * 1024 ' default 6000 kbytes
if WScript.Arguments.Named.Exists("sizelimit") then
    sizelimit = WScript.Arguments.Named("sizelimit")
end if

' use a Scripting.FileSystemObject to get the file objects of each file
' in the source directory. The file object has a Size property, which
' has the file size in bytes
dim fso: set fso = CreateObject("Scripting.FileSystemObject")
dim sourcefolder: set sourcefolder = fso.GetFolder(sourcepath)
if not fso.FolderExists(destinationpath) then
     ' we'll throw an error if the path is not found but you could instead
     ' create the directory automatically
     err.raise 1,,destinationpath & " not found"
end if

' loop through each file in the directory, compare size property against
' the limit and copy as appropriate
dim file, count: count = 0
for each file in sourcefolder.Files
    if file.size > sizelimit then
         file.Move destinationpath
         count = count + 1
    end if
next

WScript.Echo("complete: " & count & " file(s) moved")

Вы можете запустить это (назовите его move-files.vbs) из командного файла следующим образом:

cscript move-files.vbs /source:"C:\Documents and Settings\Username\Desktop" /destination:"F:\backup" /sizelimit:1000
2 голосов
/ 11 августа 2011

вы можете использовать vbs с файловым объектом: Ссылка на объект файла

или вы можете попытаться создать файл .bat, используя эту команду для извлечения размера файла.

for %%R in ([filepath and name]) do if %%~zR GTR [file size]

с этой страницы: Пакетный файл для проверки размера файла

Я бы порекомендовал опции VBS для большей безопасности.


РЕДАКТИРОВАТЬ: это пакетный файлдля перемещения файлов.Пожалуйста, измените <move file> на более подходящую команду.

@echo off
for /F "usebackq tokens=3,4" %%i IN (`dir /-C`) DO CALL :MOVE_FILES %%i %%j 
exit /b 0

:MOVE_FILES
if %1.==. exit /b 0
if %1 GEQ 6000000 <move file>
...