1

Тема: jscript. MoveFolder вызывает ошибку "Разрешение отклонено"

Уважаемые эксперты, нужно переместить папки с файлами внутри них в определенную папку, но при вызове метода moveFolder выходит сообщение с ошибкой "Разрешение отклонено". Что я сделал неправильно?

var target = "\\\\xx.xx.xx.xx\\C$\\data\\"; // здесь вместо xx.xx.xx.xx реальный ip-адрес
var packetFolder = "c:\\data"; 
var fso = WScript.CreateObject("Scripting.FileSystemObject");
var date = new Date();
var dir = "";
var today = "";

if (((date.getMonth()+1) < 10) && (date.getDate() < 10)) {
    today = date.getYear()+"_0"+(date.getMonth()+1)+"_0"+date.getDate();
}
else if (((date.getMonth()+1) < 10)) {
    today = date.getYear()+"_0"+(date.getMonth()+1)+"_"+date.getDate();
}
else if ((date.getDate() < 10)) {
    today = date.getYear()+"_"+(date.getMonth()+1)+"_0"+date.getDate();
}
else {
    today = date.getYear()+"_"+(date.getMonth()+1)+"_"+date.getDate();
}

var packets = fso.getFolder(packetFolder);
var packetsEnum = new Enumerator(packets.subFolders);

for (;!packetsEnum.atEnd();packetsEnum.moveNext()) {
        dir = packetsEnum.item();
        if (dir.Name == today) continue;
        else {
            if (fso.folderExists(target)) fso.moveFolder(dir,target);
            else WScript.exit();
        }
}

2

Re: jscript. MoveFolder вызывает ошибку "Разрешение отклонено"

worsvch
Для начала несколько заметок в стиле работа над ошибками.

1. большую группу if - else if ... else лучше переписать. Например, так, но возможны вариации с использованием функции:

var date = new Date();
var today = [
    date.getYear(), 
    ('00' + (date.getMonth() + 1)).slice(-2), 
    ('00' + (date.getDate() + 1)).slice(-2), 
].join('_');

2. здесь else абсолютно лишнее:

        if (dir.Name == today) continue;
        else {

3. проверку существования целевого каталога необходимо вынести перед циклом:

if (!fso.folderExists(target)) WScript.Quit();
...
for (;!packetsEnum.atEnd();packetsEnum.moveNext()) {
...
    fso.MoveFolder(dir, target);
}

4. команды WScript.exit() не существует, зато есть WScript.Quit()

5. последнее и важное замечание

object.MoveFolder ( source, destination );
...
Important This method allows moving folders between volumes only if supported by the operating system.

Вероятно, что в системе не разрешено перемещение каталогов между разными системами. Убедитесь в этом, выполнив перемещение "вручную", из командной строки.

( 2 * b ) || ! ( 2 * b )

3 (изменено: Flasher, 2012-09-16 00:40:19)

Re: jscript. MoveFolder вызывает ошибку "Разрешение отклонено"

Rumata пишет:

в системе не разрешено перемещение каталогов между разными системами

Не в системе не разрешено, а сами методы стандартных объектов OLE Automation не позволяют напрямую перемещать каталоги из одного тома в другой. Тут нужно заменять на Copy/Delete.

4

Re: jscript. MoveFolder вызывает ошибку "Разрешение отклонено"

worsvch что бы работать с ресурсами <диск>$ нужно иметь права админа или выдать оные на их использование конкретному юзеру

точно работающий вариант, при наличии соответствующих прав:
(xcopy c:\data\*.* \\xx.xx.xx.xx\C$\data\*.* /S /C /Y)&&(del c:\data\*.* /S /Q)
только поосторожнее с del - это вариант "одним махом всех убивахом".

Если необходимо использовать именно JScript, то вариант тот-же, сначала копируем, потом удаляем.