CMD dávka s "if" ("not")
Nazdar,
snažím se vytvořit dávku do batového souboru, která by mi překopírovala data z externích disků (flashek a pokud možno i externích HDD) na moji flashku. To by samo o sobě bylo triviální, ale já potřebuji nějakým způsobem rozlišit co má kopírovat a co ne. Mám hned dva problémy:
1.) Vím jak rozlišit kopírování podle typů souborů, ale rád bych to rozlišil i podle velikosti. Pravděpodobně na to bude něco s podmínkami "if" (př."not"), ale v těch se orientuji je na základní úrovni. Potřebuji tedy následující příkaz:
@xcopy "g:*.pptx" "COPY_G\*.*"
rozlišit tak, aby se nekopíroval soubor větší jak např. 5MB. Ale nevím, jak to udělat. Resp. ve svých pokusech jsem neuspěl.
2.) Pak mám druhý problém. Když vytvořím dávku:
@echo off
@xcopy "g:*.txt" "COPY_G\*.*"
@xcopy "h:*.doc" "COPY_H\*.*"
@xcopy "e:*.docx" "COPY_E\*.*"
pause
tak budu samozřejmě kopírovat data z umístění g (txtčka),h (MS Office W03),e (MS Office W7+), ale já chci kopírovat data pouze z flashek. Nechci čekat, než dávka "projede" i jednotky počítače, na kterém ji použiji. Zkoušel jsem to omezit přes "diskpart" ,ale samozřejmě bezvýsledně. Navíc "diskpart" vyžaduje administrátorská práva a já bych svoji dávku používal i na jiném pc, než mém. Takže mne napadlo opět vnořit funkce "if" a omezit to tentokrát podle velikosti jednotky. Aby příkaz jednoduše přeskočil jednotku větší, než 16(32)GB. Bude to sice omezeno vzhledem k externím HDD, ale na to si pak napíšu dávku samostatně.
Bohužel opět narážím na chabou znalost podmínek v cmd.
Takže si od Vás vzdělanějších slibuji nejen to, že mi pomůžete s vytvořením této dávky, ale i mi vnesete trochu světla do podmínek "if".
Děkuji
Mohl by tě zajímat příkaz (externí) robocopy, http://www.google.cz/search?client=opera&rls=cs&q= robocopy&sourceid=opera&ie=utf-8&oe=utf-8&channel= suggest
Pavel
Jo, jo, ten znám. Jenomže je standardně myslím až od Visty. Já bych rád používal tohle na všechny win od winXP. Proto taky ověřuji, jestli funguje na winXP korektně i "wmic logicaldisk ...".
Každopádně teď se snažím vymyslet ty proměnné. Až z toho vznikne něco aspoň trochu funkčního, tak napíšu. Ale samozřejmě vítám pomoc.
Snad není problém umístit robocopy na tvou flashku, ne? Robocopy umí (kromě jinýho) i kopírovat soubory větší/menší než zadaná hodnota. To by se ti dost hodilo, ne?
Pavel
Jo, ale jak umístit příkaz robocopy na moji flashku? Měl jsem dojem, že bude chtít instalaci - tzn admin práva. Nebo je nějaký způsob, jak umístit externí příkaz na flashdisk a z něj ho spustit?
Teď nevím zda je robocopy nutný instalovat nebo ne. Vyzkoušej a uvidíš. Tj. nakopíruj robocopy.exe na tvou flashku a zkus ji spustit na PC s WinXP.
Pavel
Zkusím to přes WMVare. Ale jinak stejně potřebuji pomoc s převedením výsledku toho příkazu
na proměnné. Nevíš náhodou jak na to?
Dobře, tak jsem to na čas hodil k ledu a budu na tom průběžně dělat. Potřebuji ale poradit, jestli jde výpis úspěšnosti dávky po skončení zapsat do dokumentu. Mě to přes prosté ">" nešlo a už na tom dělám hodinu. Kde mám chybu? Můžete sem někdo hodit nějaký vzorový příklad?
Př.:
Řekněme, že mám dávku, která třeba vytvoří složku ("mdir") - úspěšně. Něco někam překopíruje ("xcopy"), ale to jí nepůjde, protože soubor nenajde. a pak třeba něco smaže ("del/erase"), což se jí povede. Jak udělat výpis, který by řekl: mdir OK, xcopy ERROR, del OK. Nemusí to být samozřejmě takto (i s přepisem příkazu), stačí mi zatím jen výpis ("OK, ERROR, OK")
Doufám, že jsem to s tou názorností nepřehnal.
Díky
errorlevel.php