reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

WScript - kontola kodu

majko78 (61)|1.2.2010 20:30
Ahoj,

chcel by som poprosit (ak by sa niekomu chcelo) o kontrolu a komentar k prilozenemu kodu.

Mal by premenovavat sobori s jednej skupine adresarov a potom ich presunut do inej skupiny adrersarov:

1. niekto vlozi subor *.pdf do adresara 1
2. tento sa premenuje podla toho v akom adresari je (kazdy adresar ma vlastny identifikator)
3. subor sa presunie do adresara 2 ktory zodpoveda adresaru 1

ostatne vid priloha..

Dakujem.

Marian.
Logout (4018)|1.2.2010 21:51
1) ten soubor dělá něco s ini souborama, o tom nic nepíšeš
2) kód bez jakejkoli komentářů Ti nikdo luštit nebude, a to ze dvou důvodů. Zaprvý je to tak hrozně těžko čitelný, zadruhý je to "čunačina".
3) až ho okomentuješ, tak ho sem vlož nezararovanej, kdo se s tim má rozbalovat :-), nejlíp s příponou .txt (teda doufam, že to jde :-))
majko78 (61)|2.2.2010 20:16
Ahoj,
dik za odpoved a upozornenie. Kedze som sa uz nedostal do editacie mojho prispevku, posielam nanovo subot , tentokrat premenovany na "rename_v2.1.vbs.txt" a k nemu prilozeny subor "folders.txt", z ktoreho sa tahaju nazvy adresarov. Snazil som sa aj o podrobny popis kodu.
V podstate ide o to, ze sledujem skupinu adresarov , ci v nich nepribudli subopri urciteho typu (napr *.xxx). Ak ano, tak do nazvu suboru pridam znaky opisujuce umiestnenie suboru (podla cesty k suboru) a nasledne ho skopirujem na ine umiestnenie (napr z diku c na disk d), kde sa nachadza adresarova struktura (zlozena zo vstupnych adresarov).

pr:
1. mam subor ssss.xxx a vlozil som ho do c:\J\G\I\OOOO\GGyyyyyyyy\eeeeeeee
2. premenujem subor na ssss_BBBB_AA001.xxx, BBBB pridane podla OOOO,
AA001 preidane podla GGyyyyyyyy (priradene podla folders.txt)
3. presuniem ho do d:\xyz\eeeeeeee

poznamka: OOOO bud je alebo nie je, poslednych adresarov (eeeeeeee) je vela

Dufam ze som ten opis zvladol.

Dik Marian.
Logout (4018)|3.2.2010 13:06
profnick a profil jde naplnit v jednom cyklu.

Monitorovat adresáře nějak sofistikovanějc asi opravdu nejde.

Execute "RenameIt" & " " & Chr(34) & folder.Path & Chr(34)
jde napsat jednodušejc
Execute "RenameIt " & Chr(34) & folder.Path & Chr(34)
ne?

Někdy je lepší pro čitelnost příkazy sdružovat, místo zavádění proměnejch, např místo
nName=Replace(sName,"BBBB","")
fil.Name=nName+sExt
todle:
fil.Name=Replace(sName,"BBBB","") + sExt
(ale zas u složitějších výrazů je to lepší rozdělit to jo)

Pokud to má bejt čitelný, tak odsazuj cykly, by bylo poznat
kam až kterej sahá:
[code]
If sExt=".xxx" Then
If InStr(1, sName, "_BBBB") > 0 Then
fil.Name=Replace(sName,"_BBBB","")+sExt
If Err.number<>0 Then
chyba=1
Exit Do
End If
ElseIf InStr(1, sName, "BBBB") > 0 Then
fil.Name=Replace(sName,"BBBB","")+sExt
atd....
[/code]

Místo testování v každém souboru, v jakém adresáři se vlastně nachází je efektivnější při průchodu
adresářovou strukturou si pamatovat, v jaké jsem větvi.

To je asi tak co mě k tomu napadá...
majko78 (61)|3.2.2010 20:44
Ahoj,
dakujem za dobre rady. Budem si davat pozor (hlavne na tie vnorene "funkcie").
K tym poliam. Povodne som ich plnil v jednej slucke. Asi to znovu prerobim. Bude to urcite lepsie (ako pises).

Dnes som opat hladal na internete, ako minitorovat tie adresare a nasiel som toto:

strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colMonitoredEvents = objWMIService.ExecNotificationQuery ("SELECT * FROM __InstanceCreationEvent WITHIN 10 WHERE " & "Targetinstance ISA 'CIM_DirectoryContainsFile' and " & "TargetInstance.GroupComponent= " & "'Win32_Directory.Name=""c:\\\\vbs/_Temp""'")

Do
Set objLatestEvent = colMonitoredEvents.NextEvent
Wscript.Echo objLatestEvent.TargetInstance.PartComponent
Loop

Ale ked som sa zamyslel, tak v podstate to tiez vyuziva slucku v ktorej sa testuje zmena. Takze v konecnom dosledku to vide asi narovnako. Jediny rozdiel asi je, ze je to rychlejsie, kedze nemusi zakazdym prechadzat vsetkymi adresarmi. Co hovoris na ten kod?

Co sa tyka odsadzovania riadkov, je to super vec.

Ta cast kodu, kde testujem pri jednotlivych suboroch, by mala zistit, ci tam uz subor raz bol, cize uz je premenovany. A ak je, nazov suboru dam do povodneho stavu (taky aky bol pred premenovanim) a nasledne ho znovu premenujem podla adresara. Je to koli tomu, ze ak ho daky user znovu pouzije, premenuje, aby napr nebol AA001 a AA002 naraz v nazve (ak by ho dal do ineho ako povodneho vstupneho adresara. (komplikovane)

Este ohladom object.move - namiesto neho som pouzil robocopy. Bolo to koli tomu, ze object.move sice fungovala, ale necaka kym sa presun suboru skonci a kod ide dalej do dalsej slucky. potreboval som, nech caka kym sa presunie subor, a az potom nech kod pokracuje (pre istotu). Ked som tam este nemal "Err.", tak sa spustilo na tom istom subore (velky, nad 1GB) move viackrat, bola to sranda (vznikali chyby a nesdeli CRC sucty ).

Este ma napadlo, ci nahodou nepoznas sposob ako by sa dalo indikovat v tray liste (kdesi pri hodinkach), ze script je aktivny, resp spusteny. Dakujem.


Marian.
Logout (4018)|4.2.2010 02:18
& slouží ke spojování řetězců. Takže někde v tom příkladě ho můžeš vynechat.

Rychlejší by to bejt mělo, protože to nemusí procházet disk, ale jen databázi událostí systému.

Jak dát script do tray nevím. Myslí, že do tray může bejt daný jen okno, čili plnohodnotná aplikace, ale to je jen doměnka.
majko78 (61)|4.2.2010 08:09
Dakujem za rychlu odpoved a rady. Mozno to prerobim na sledovanie udalosti (uvidim aky bude vikend :-) ). Prajem pekny den.

Marian.
durib (1141)|13.2.2010 14:38
Prominte, ze zneuzivam toto vlakno, ale muj dotaz se tyka .vbs a tvorit nove by diskuzi asi zneprehlednilo.
Mam dotaz, jak spustit soubor *.vbs? Na jeho editaci pouzivam Notepad++, ale za nic na svete nevim, jak script spustit. Mam W7. Potrebuju k tomu jeste nejaky program, nebo jak? diky za radu.
xmarek (1676)|13.2.2010 19:45
http://en.wikipedia.org/wiki/VBScript

A VBScript script must be executed within a host environment, of which there are several provided with Microsoft Windows, including: Windows Script Host (WSH), Internet Explorer (IE), Internet Information Services (IIS). Additionally, The VBScript hosting environment is embeddable in other programs, through technologies such as the Microsoft Script control (msscript.ocx).