Umějí dávkové soubory pracovat s atributy "šifrovaný" a "komprimovaný? Nebo je třeba užít skripty?
Dobré odpoledne, umí příkazový řádek ve Windows 2000/XP pracovat s atributy "šifrovaný" a "komprimovaný? Je možné napsat dávku, která by například vypsala všechny soubory s atributem "šifrovaný" ve složce C:\Test? Nebo se pro tento úkol musí použít nějaký skript? Může prosím někdo uvést příklad takové dávky/skriptu? Předem děkuji za váš čas.
V PowerShellu to vypadá nějak takhle
// Edit: ještě seznam atributů
[Enum].GetValues([IO.FileAttributes])
ReadOnly
Hidden
System
Directory
Archive
Device
No r mal
Temporary
SparseFile
ReparsePoint
Compressed
O f fline
NotContentIndexed
Encrypted
Mitchi, děkuju za promptní odpověď. Teď jsem to zkoušel a vyhazuje to tuhle chybovou hlášku:
Řádek: 1
Znak: 15
Chyba: Byl očekáván znak ;
Chyba kompilace
Tvůj výše uvedený skript jsem uložil jako Skript.js a spustil přes příkazový řádek a Windows Script Host. Dělám něco špatně?
No vcelku jo Tohle není Jscript ale PowerShell, náhrada command lajny. Jestli nemáš tak musíš stáhnout pro XP na
http://www.microsoft.com/downloads/details.aspx?Fam ilyId=6CCB7E0D-8F1D-4B97-A397-47BCC8BA3806&display l ang=en
Jinak cmd podporuje jen základní atributy a attrib neumí Encrypted stejně jako WSH. Ale radši si to ověřím.
To je trošku problém, protože PowerShell nefunguje na Win 2000, kde jsem to momentálně zkoušel. Potřeboval bych nějaké "univerzální" řešení pro Windows 2000 i XP, které by se dalo podle potřeby používat na obou platformách. Proto mě napadl WSH.
Zkus se podívat sem:
339
http://msdn2.microsoft.com/en-us/library/5tx15443.a spx
http://www.aspfree.com/c/a/Windows-Scripting/Advanc ed-Files-and-Folders-in-WSH/2/
Tak host to roseknul. WSH + WMI je ta správná volba
Děkuju za tipy, hoste. Předem se omlouvám za svou omezenost, ale řešení toho problému tam nějak nevidím. Atribut "šifrovaný" je jen v tom prvním odkazu, v dalších ne. Protože o skriptování vím v zásadě jen to, že existuje, nějak si to asi neumím spojit. Jestli tam to řešení je, moc prosím o jeho vložení sem pokud možno přímo v aplikovatelné podobě.
Jakápak omezenost, žádný učený z nebe nespadl (touchwood je vyjímka )
Zkus to nějak takhle:
Jelikož Laik psal, že potřebuje ještě podporu pro atribut Encrypted, tak bych spíš použil skript z prvního odkazu (techtasks). FileSystemObject to neumí.
Mitchi, tvoji poznámku jsem si přečetl až po odeslání předchozí odpovědi. Máš tedy řešení i pro atribut "šifrovaný" nebo nejlépe řešení, které zvládne oba atributy? Pokud ano, budu vděčný za jeho uvedení zde, včetně těch detailů, na které se ptám v technické poznámce výše.
Děkuju, hoste. Už si to pomalu začínám dávat dohromady. Pročítal jsem ty odkazy ještě jednou, ale nenašel jsem tam to číslo pro atribut "šifrovaný" (jako je 2048 pro "komprimovaný"), protože ta čísla jsou právě v těch odkazech, kde se o atributu "šifrovaný" nepíše. Rozumím tomu tedy dobře, že tohle řešení se dá použít jen pro "komprimovaný" a ne pro "šifrovaný"?
A ještě technická poznámka. Mám to klasicky uložit jako .vbs nebo .js a pak spouštět poklepáním, nebo je nějaký lepší postup? Mám tam někam doplnit něco jako "Echo on", aby mně pak výpis těch souborů zůstal na obrazovce?
Moc jsem to do hloubky nestudoval, ale pochopil jsem to tak, že atribut "šifrovaný" neexistuje. Dá se sice rozpoznat, jestli je soubor šifrovaný či nikoliv, ale není to prostě obsaženo v jeho atributech (tak jako jsou pouze pro čtení, skrytý, systémový a pod.).
Ta ukázka stačí uložit do souboru s příponou vbs. Výpis na obrazovku je prostřednictvím Msgboxu - nevím, pro jaké to máš přesně použití, to by sis musel upravit podle vlastních požadavků.
co to vidím?
blik!
OK tak sem překopíruju jeden z tech skriptů
Myslím že je to docela výmluvný. strFilePath obsahuje cestu k souboru. Atributy se pak dají
zjištovat přes objekt objFile. Pokud je soubor šifrovaný, objFile.Encrypted je true, jinak false.
Takže třeba tohle:
strFilePath = "d:"
WScript.Echo " Encrypted: " & objFile.Encrypted
WScript.Echo " Compressed: " & objFile.Compressed
mně vyhodí všechny komprimované a šifrované soubory na disku D:?
Ne.
Ten skript je pro vypsání informací o jednom souboru. Pokud chceš projít všechny soubory v definovaném adresáři, je nutno použít nějaký cyklus (smyčku).
A jak se taková smyčka vytváří? Jestli ji umíš vytvořit, mohl bys mně ten skript napsat? Můžeme zůstat u toho příkladu výše s cílem najít a zobrazit všechny soubory na disku D: s atributem "šifrovaný" nebo "komprimovaný".
Ukázku smyčky už jsem ti psal v předchozím příkladu
Takže třeba takhle?
strFilePath = "d:"
for each objFile in files
WScript.Echo " Encrypted: " & objFile.Encrypted
WScript.Echo " Compressed: " & objFile.Compressed
Než se pustíš do skriptování, měl bys projet aspoň základy Skloubil jsem hostův kód s tím z odkazu a vyšlo
Basic jsem opustil už dávno tak je to taková slátanina... ale funguje
Perfektní, Mitchi. Funguje na Win 2000 i na XP. Můžu jen ještě poprosit o radu, jak to udělat, aby to projelo i podsložky a ignorovalo soubory, které nejsou ani šifrované ani komprimované? Tak aby výsledek byl seznam jenom souborů šifrovaných či komprimovaných ve všech složkách i podsložkách na disku. Předem děkuju za tu spoustu času, kterou jsi tomu už věnoval.
Podívám se na to o víkendu jestli to nějak nespěchá.
v zásadě je potřeba napsat to rekurzivně (tj. udělat si funkci) a tou projíždět všechny adresáře, a znova vyhledat adresáře a ty předat jako parametry dané funkci (+ samozřejmě to tvé vyhledávání)
Napsal bych to, je to otázka max. 30 minut, ale v souč. době na to prostě nemám čas.
Ten Basic to je strašně ukecanej jazyk Je to dělaný pro konzoli a přijímá jeden parametr a to je složka ve které to má začít. Když to uložíš jako skript.vbs a budeš chtít projet celý C tak to pusť..
Skript zobrazí jen soubory které jsou buď komprimované nebo šifrované a za jejich názvem pak C pro komprimovaný soubor a E pro šifrovaný.
//EDIT: Dalo by se to možná řešit i SQL dotazem ale nějak se mi to nepodařilo zprovoznit.
Mitchi, smekám před tvými schopnostmi a jsem tvým (alespoň virtuálním) dlužníkem. Skript funguje na obou platformách bezchybně přesně tak, jak jsem potřeboval. Snad jen ještě jeden minidetail. Při testování skript narazil na složku dllcache, kde je velké množství komprimovaných souborů. Seznam na příkazovém řádku byl tak dlouhý, že na obrazovce zůstal jen jeho konec. Dá se v příkazovém řádku nějak "doskákat" dopředu na začátek toho seznamu?
proč si výstup nepřesměruješ do souboru?
příklad:
Touchwoode, děkuju. Tím je můj problém vyřešen dokonale a se vším všudy. Ještě jednou děkuju všem, kteří se zapojili, za jejich čas a ochotu pomoci.