Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem 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

Předmět Autor Datum
rozlišení disků: kopíruj to od písmena e: - s tím že si otestuj, jestli neexistuje skrytý adresář \r…
lední brtník 01.02.2012 06:21
lední brtník
Je nějaký důvod proč to psát zrovna v BAT? Pokud máš XP a novější, tak by se ti to lépe dělalo v Pow…
ws79 01.02.2012 09:00
ws79
Nepochopil jsem jak to "lední brtník" myslíš. Tak jsem vytvořil toto: echo Zahajit kopirovani infor…
Ondra HP 01.02.2012 14:56
Ondra HP
já zase nepochopil, proč reaguješ na uživatele "ws" a píšeš Brtníkovi...
touchwood 01.02.2012 15:05
touchwood
Omlouvám se, špatně zařazeno... :-/
Ondra HP 01.02.2012 15:08
Ondra HP
Napadlo mne to rozlišit podle souboru, které mají pouze pevné disky ve smyslu "if exist". Je nějaký…
Ondra HP 01.02.2012 19:36
Ondra HP
Tak problém s velikostí flashky vyřešen. prostě jsem použil if (jak jsem uvedl v tom špatně zařazené…
Ondra HP 01.02.2012 19:47
Ondra HP
NE!!!!! Jsem zase na začátku. Ono to neporovnává cestu podle velikosti! Ale podle pořadí písmen v ab…
Ondra HP 01.02.2012 19:58
Ondra HP
Nejak som Ti neporozumel... Ehm, to akože chceš vytvoriť nejaký automat, ktorý sám pozná odkiaľ a ka…
pme 01.02.2012 20:07
pme
Zkusím to říct znovu srozumitelněji, protože moje předchozí text jsou docela zmatené. Chci mít vytvo…
Ondra HP 01.02.2012 20:49
Ondra HP
Veľmi Ti neporadím, nie som "guru" (ale možno s pomocou niekoho iného). Skús použiť príkaz: wmic log…
pme 01.02.2012 21:05
pme
To je geniální. Děkuju. O příkazu "wmic logicaldisk ..." jsem vůbec nevěděl. Je i v XPčkách? (Já mám…
Ondra HP 12.02.2012 12:37
Ondra HP
Mohl by tě zajímat příkaz (externí) robocopy, http://www.google.cz/search?client=opera&rls=cs&q= rob…
Pavel 12.02.2012 13:39
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 wi…
Ondra HP 12.02.2012 13:47
Ondra HP
Snad není problém umístit robocopy na tvou flashku, ne? Robocopy umí (kromě jinýho) i kopírovat soub…
Pavel 12.02.2012 14:05
Pavel
Jo, ale jak umístit příkaz robocopy na moji flashku? Měl jsem dojem, že bude chtít instalaci - tzn a…
Ondra HP 12.02.2012 14:08
Ondra HP
Teď nevím zda je robocopy nutný instalovat nebo ne. Vyzkoušej a uvidíš. Tj. nakopíruj robocopy.exe n…
Pavel 12.02.2012 17:19
Pavel
Zkusím to přes WMVare. Ale jinak stejně potřebuji pomoc s převedením výsledku toho příkazu wmic log…
Ondra HP 12.02.2012 20:01
Ondra HP
Dobře, tak jsem to na čas hodil k ledu a budu na tom průběžně dělat. Potřebuji ale poradit, jestli j…
Ondra HP 14.02.2012 08:05
Ondra HP
errorlevel.php IF %ERRORLEVEL% NEQ 0 echo Prikaz zfailoval >>c:\log.txt poslední
touchwood 14.02.2012 08:26
touchwood

rozlišení disků: kopíruj to od písmena e: - s tím že si otestuj, jestli neexistuje skrytý adresář \recycle* (pozor, mívají různé názvy):

dir /a:h e:\rec*

nad rozlišením velikosti se mi nechce bádat, dej si help: "for /?"
budeš to kopírovat a vyhodnocovat v cyklu, a taky tě zaujme parametr: "%~zI ... Rozvine %I na velikost souboru."

velikosti umí porovnávat: "if /?"

syntaxe pro příkazový řádek je zoufale neschopná, ani se nedivím že za dobu windows ho ms už počtvrté zkouší nahradit.

Nepochopil jsem jak to "lední brtník" myslíš. Tak jsem vytvořil toto:

echo Zahajit kopirovani informaci z externich jednotek?
pause

@echo off
 set flashmy="F:"
 set flash="G:"
 if %flashmy% LSS %flash% (
 echo Tvoje flashka je vetsi.
pause
 ) else (
 echo Tvoje flashka je mensi.
 pause
 )

echo Data prekopirovana. Gratuluji

To porovná velikost flashek a vyhodí, jestli je moje flashka (%flashmy%) větší, nebo menší než ta z které chci kopírovat. Místo echa pak dám pokyn ke kopírování. No ale má to háček. Nevím, jak dosadit místo "F:" údaj ve velikosti v GB. To je první část, co potřebuji pomoc vyřešit.

Nad omezením souborů podle velikosti jsem také bádal, ale neúspěšně. Potřeboval nějakou větší pomoc.

Napadlo mne to rozlišit podle souboru, které mají pouze pevné disky ve smyslu "if exist". Je nějaký takový soubor? Nebo naopak na flashkách?
Minimálně tak rozliším systémovou partition, protože tam bude složka "windows".

Tak problém s velikostí flashky vyřešen. prostě jsem použil if (jak jsem uvedl v tom špatně zařazeném příspěvku a funkci %cd%. Když bude soubor uložen v rootu flashky, tak vždycky porovná s ní.

Nejak som Ti neporozumel... Ehm, to akože chceš vytvoriť nejaký automat, ktorý sám pozná odkiaľ a kam má kopírovať? Myslíš, že si to samo zistí, že sa jedná o vymeniteľné médium a práve z tohto to má kopírovať? A akože to samo zistí, že zo všetkých diskov, ktoré sú k dispozícii bez Tvojho zásahu to tam na správne miesto nakopíruje?
Možno som unavený, ale fakt nechápem.

Predsa dávku spustíš s parametrami odkiaľ - kam, hotovo - všetko ostatné už v dávke máš ošetrené nie?

Zkusím to říct znovu srozumitelněji, protože moje předchozí text jsou docela zmatené.
Chci mít vytvořenou dávku v batovém souboru, který budu mít uložený na flashce a bude fungovat následovně..:

Jakmile zasunu flashku do jakéhokoliv pc (od win XP po win 7) a spustím následujícím ji, tak vykoná toto:
Na moje flashku, zkopíruje všechna data ze všech ostatních flashek, které jsou v tom pc zasunuté na tu moji.

A udělá to s následujícími podmínkami: půjde jen o soubory určitých typů a do určité velikosti.

Ale narážím na mnoho úskalí. Musím zabránit tomu, aby kopírovala z umístění větších, než (16)32GB (standart ní největší flashka) -> tím by se zabránilo tomu, aby procházela disky v počítači. (Znám dost lidí, co mají 2-3 disky a okolo 7 partition od C: po I:, každou po 250GB; o síťových jednotkách ani nemluvě).
A pak musím omezit kopírování podle velikosti. Aby dávka NEkopírovala soubory - jeden např. o velikosti 2GB (prostě zbytečně velké).

Spousty věcí už jsem vyřešil sám. Už kopíruje soubory i s adresáři a přitom se drží vybraných typů. Už nekopíruje "ze sama sebe" (pomocí if+%cd%). Atd. atd.

Ale jinými slovy, jsem pořád tam kde jsem byl, když jsem tenhle dotaz položil, přestože jsem myslel, že je už vyřešeno.

Veľmi Ti neporadím, nie som "guru" (ale možno s pomocou niekoho iného).
Skús použiť príkaz: wmic logicaldisk get caption,description,filesystem mne to na Win7 funguje...
Výstup si preveď do nejakých premenných, alebo čo ja viem (fakt sa nevyznám...) a ak sa jedná o "removable disk" je jasné o čo ide...

To je geniální. Děkuju. O příkazu "wmic logicaldisk ..." jsem vůbec nevěděl. Je i v XPčkách? (Já mám win7).
Jinak nejlepší je asi použít kombinaci toho tvého "wmic logicaldisk get caption,description,filesystem" a ještě ",size".
Každopádně je tu někdo, kdo mi ukáže, jak převést výsledky do proměnných? Já umím v CMD používat proměnné pouze u věcí, co mám zadané (jako %date%, %username% atd.) - tedy spíš na základní úrovni. Ale jak vykuchám proměnné třeba z tohohle: (exportovaný příkaz "wmic logicaldisk get caption, description, filesystem, size >reseni.txt")

Caption  Description       FileSystem  Size          
C:       Local Fixed Disk  NTFS        64019095552   
D:       Removable Disk    NTFS        16021188608   
F:       Removable Disk    NTFS        2002706432    
G:       Local Fixed Disk  NTFS        320072900608  
Y:       CD-ROM Disc                                 
Z:       CD-ROM Disc    

Díky. Omlouvám se, že jsem se teď chvíli nehlásil, takže to zapadlo, ale byl jsem na dovolené.

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.

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
Díky

Zpět do poradny Odpovědět na původní otázku Nahoru