Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[WSH JScript] try/catch vraag

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemiddag,

ik ben bezig met een haast klus :( Voor een Windows NT machine :( :(

De taak is zeer eenvoudig: kopieer mpg files en de bijbehorende xml files van een source directory naar en destination directory en verwijder de gekopieerde file daarna van de source directory. De enige voorwaarde is dat de XML moet bestaan voordat de MPG kan worden gekopieerd.

Het onderstaande jscript wordt op de command line aangeroepen met cscript scriptname.js

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*  users can change this
    make sure that paths are terminated with a backslash (actually a double one) as shown
*/

/* source directory; e.g. d:\\externaldisk\\ */
var dirsrc = "src\\";
/* destination directory; e.g. d:\\data\\shared\\ */
var dirdst = "dst\\";

/*
This script moves files from the source to the destination by using copy and delete.
This assures that an existing handle on a file in the destination directory does not get corrupted.
*/


/* do not change below this line if you don't know what you're doing */

var fso = new ActiveXObject("Scripting.FileSystemObject");
//var folderTemp = WScript.Arguments.Item(0);
var folderTemp = dirsrc;
var folder = folderTemp.replace("\\", "\\\\");
var e = new Enumerator(fso.GetFolder(folder).files);

for (e.moveFirst(); ! e.atEnd(); e.moveNext()) {
    var file = e.item();
    var xmlsrcfile;
    var extension = fso.GetExtensionName(file);
    if (extension == "mpg")
    {
        xmlsrcfile = fso.GetParentFolderName(file) + "\\" + fso.GetBaseName(file) + ".xml";
        if(fso.FileExists(xmlsrcfile))
        {
                WScript.echo("copy " + file + " to " + dirdst);
                fso.CopyFile(file, dirdst, true);
            try
            {
                WScript.echo("delete " + file);
                fso.DeleteFile(file, true);
            }
            catch(e)
            {
            }
            
                WScript.echo("copy " + xmlsrcfile + " to " + dirdst);
                fso.CopyFile(xmlsrcfile, dirdst, true);
            
                WScript.echo("delete " + xmlsrcfile);
                fso.DeleteFile(xmlsrcfile, true);
        }
        else
        {
            WScript.echo("skip " + file + " ('" + xmlsrcfile + "' missing)");
        }
    }
}


Het principe werkt maar in bovenstaande code (zonder de try/catch) loop ik tegen een probleem aan als ik probeer een file te verwijderen die om een of andere reden gelock'ed is. Het script crashed; geen probleem, een try/catch biedt de oplossing (althans, dat verwachtte ik). Na de implementatie van de try/catch rondom een delete krijg ik echter de volgende foutmelding

code:
1
Microsoft JScript runtime error: Object doesn't support this property or method


Advies is welkom en als altijd bij voorbaat dank voor het meedenken.

PS
Zoeken op het web heeft nog geen resultaat opgeleverd voor de specifieke omstandigheden (run jscript in de dosbox)

PPS
Ik ontwikkel op een Win7 platform omdat ik op dit moment geen toegang heb tot de NT machine; het probleem openbaart zich dus momenteel op de Win7 machine maar ik vermoed dat hetzelfde zal gebeuren op de NT machine.

PPPS
De haastklus is geen aanduiding dat ik van jullie gisteren een antwoord verwachtte ;) Alleen dat mijn baas zit te wachten op een oplossing die gisteren klaar was :)

[ Voor 6% gewijzigd door Verwijderd op 28-05-2014 12:42 ]


  • Jeroen
  • Registratie: Juli 2005
  • Laatst online: 20-11 18:26

Jeroen

uǝʌ ǝp uɐʌ

Misschien niet heel mooi, maar zou je On Error Resume Next kunnen gebruiken en dan na het deleten kijken of het deleten gelukt is?

"I don't always test my code, but when I do, I test on production."


Verwijderd

Topicstarter
Zal even wat gaan lezen ;) Vedankt voor het antwoord.

Verwijderd

Topicstarter
OK, dat heeft het niet echt opgelost omdat het, voor zover ik kan beoordelen VBS is en geen jscript, en ik geen idee heb hoe ik die twee kan integreren.

Maar het probleem is opgelost en goed lezen van fout meldingen helpt (en ze hier compleet neerzetten). De fout melding refereerde naar het for statement met een variabele 'e'. En de catch gebruikt ook een variabele 'e' :(

Veranderd naar 'ex' en het probleem is opgelost.