Vytvoření Dávkového souboru ve Win Xp

Na téma Windows XP, 2000, Me, 98, 95 a starší

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod neumi_nic 18. 2. 2014 09:01

Ahojte

Musim se předem omluvit, jsem z generane DOSem nepolíbené. Co potřebuji. Potřebuji zrealizovat dávkový bat soubor, kdy se při jeho spuštění vytvoří na daném místě nový adresář , který se pojmenuje buďto dle čísel (1,2,3) nebo ještě lépe dle aktuálního data a poté se do něj zkopírují data (daný adresář bude na ext. hdd) z pevného disku c. - přímo do toho nově vytvořeného adresáře.

Vím že bat mohu vytvořit např. v poznámkovém bloku a pak jej uložit jako "všechny soubory" a dopsat koncovku .bat.

Jen nevím jak s vytvořením těch adresářů.
disk C - pevný hdd - odsud se bude kopírovat
disk D - externí 2,5" HDD kam se bude kopírovat

Napadlo mě toto:

cmd
MD d:\Zaloha dat\1\
COPY c:\zaloholovany adresar\*.* d:\Zaloha dat\1\
EXIT

Toto je jen o tom, že vytvoří jeden adresář při každém spuštění a zkopíruje do něj vše z C zalohovaný adresář. JAký příkaz mám teda napsat k MD, aby vytvářel pokaždé nový adresář podle čísel nebo data a dále aby se při každém spuštění do nového adresáře kopírovali aktuální data ze stejného zdroje?

děkuji za pomoc

PS: Abych nezapoměl, celé toto bude sloužit k tomu, aby si dotyčná osoba mohla pravidelně a jednoduše jedním klikem zálohovat data na svůj externí disk z nejmenovaného účetního programu, jehož obsah se stále mění. Dotyčná krom zapnutí a editaci v onom účetním programu neumí s pc vůbec zacházet a tímto bych chtěl zajistit pravidelnou zálohu dat.

děkuji
neumi_nic
Junior

Odeslat příspěvekod Milanr1 18. 2. 2014 09:52

Typická úloha pro cyklus for
Příklad viz např.:
http://stackoverflow.com/questions/8488 ... e-modified
neumi_nic píše: koncovku .bat

Na DOSovský .bat už konečně zapomeň. :-)
V OS WNT se používá už > 20 let .cmd.

//
Tohle je chybně:
neumi_nic píše: aby si dotyčná osoba mohla pravidelně a jednoduše jedním klikem zálohovat data

K tomu už od minulého tisíciletí slouží Scheduler (Plánovač) + robocopy.
BFU vůbec nemusí tušit, že se něco někam zálohuje.
Milan
Milanr1
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Pytlík 18. 2. 2014 09:58

- Datum se skrývá v proměnné %date%, bohužel však i s názvem dne. Abys tedy vyseparoval čisté datum (např. 18.02.2014), musíš to použít ve tvaru %date:~-10%
- O tom čísle nevím, kde se bere, takže ti neporadím
- Pokud některá cesta, nebo soubor, obsahují mezeru, musíš je uzavřít to uvozovek: "C:\Program Files\Blbec Usaty.txt". Když to uzavřeš pokaždé, bez ohledu na (ne)mezery, neuděláš chybu.
- V názvech souborů a cest se co možná vyhýbej diakritice, dělává to potíže (problémy s rozdílným kódováním v Cmd.exe a ve Windows).
Jo, a .cmd a .bat jedno a totéž jsou, to pouze Milanr to rozeznává.
Pytlík
Pokročilý
Uživatelský avatar

Odeslat příspěvekod neumi_nic 18. 2. 2014 10:15

Milanr1 píše:Typická úloha pro cyklus for
Příklad viz např.:
http://stackoverflow.com/questions/8488 ... e-modified
neumi_nic píše: koncovku .bat

Na DOSovský .bat už konečně zapomeň. :-)
V OS WNT se používá už > 20 let .cmd.

//
Tohle je chybně:
neumi_nic píše: aby si dotyčná osoba mohla pravidelně a jednoduše jedním klikem zálohovat data

K tomu už od minulého tisíciletí slouží Scheduler (Plánovač) + robocopy.
BFU vůbec nemusí tušit, že se něco někam zálohuje.


.... jenže bfu bude chodit na dané pracoviště jednou týdně v nespecifikovanou dobu a připojí ext. hdd jen pro účely zálohy (proto je bat ideální) a poté ho zase odpojí
neumi_nic
Junior

Odeslat příspěvekod Miroslav Pragl 18. 2. 2014 10:19

cmd a bat NEJSOU to same. (jeste navic) dle verze a architektury OS jsou zpracovavany interpreterem command.com (ktery muze volat cmd.exe) nebo primo cmd.exe. Dobry zvyk je pouzivat priponu .cmd, pokud nepises neco prehistorickeho.

Co se cisel tyce: pouzij klasicky for cyklus nebo skok s inkrementovanou promennou (%dirname%):

- zacni od 0 (set dirname=0)
- inkrementuj (set /a dirname+=1)
- podivej se, zda adresar existuje (if not exist ...\%dirname% )
- pokud ano skoc na inkrementaci (goto ...)
- pokud ne mas prvni volne cislo (mkdir ..\%dirname%)

etc.

MP
Miroslav Pragl
Expert
Uživatelský avatar

Odeslat příspěvekod Pytlík 18. 2. 2014 10:27

Najdi ve Win7 soubor Command.com a já 100x napíšu ".cmd není totéž, co .bat"
Abychom se nehádali: Ve virtuálních WinXP (v nich se Command.com vyskytuje) jsem vytvořil soubor .bat s jediným příkazem pause, abych si mohl přečíst název spuštěného okna. Spustil se Cmd.exe. Totéž potom po přejmenování na .cmd.
Co vás může přesvědčit, že .bat i .cmd se zpracovávají stejně, nebo jaké máte důkazy pro to, že nikoliv?
Pytlík
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Milanr1 18. 2. 2014 10:37

[OT]
[NO FLAME]
Obvyklé fórky:
Pytlík píše:Jo, a .cmd a .bat jedno a totéž jsou, to pouze Milanr to rozeznává.

:-)
1) Zkus spustit *.cmd v herní řadě Windows 95-99 nebo v IBM OS2 v.1.0 (1987).
Hned zjistíš fatální rozdíl! :-)
2) Rozdíly jsou i ve funkční interpretaci příkazů.
Viz např. hodnoty Errorlevel
apod.
3) V 64-bit OS zpracovává příkazy .cmd nativní 64-bit cmd.exe, kdežto .bat interpretuje 32-bit cmd.exe z virtuálního WoW64, který nevidí reálný NTFS.
[/NO FLAME]
[/OT]

-- 18. 2. 2014 10:44 --

neumi_nic píše: bfu bude chodit na dané pracoviště jednou týdně v nespecifikovanou dobu a připojí ext. hdd jen pro účely zálohy

Scheduler dokáže samozřejmě detekovat připojení diskové jednotky externího HDD a spustit příslušný zálohovací .job.
Milan
Milanr1
Pokročilý
Uživatelský avatar

Odeslat příspěvekod vladimir 18. 2. 2014 11:18

Pokud použije do názvu adresáře i hodinu, minutu a vteřinu, nebude muset testovat existenci adresáře.
http://it.cestuji.info/bat/datum-cas-do ... ouboru.php

Kód: Vybrat vše
@For /F "tokens=1,2,3,4 delims=. " %%A in ('Date /t') do @(
Set den=%%B
Set mesic=%%C
Set rok=%%D
)

@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set hodina=%%A
Set minuta=%%B
Set sekunda=%%C
)

mkdir d:\zaloha_dat\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev
COPY "c:\zaloholovany adresar\*.*" d:\zaloha_dat\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev


V případě, že trváš na mezerách v názvech adresářů, je nutno použít uvozovky.
Naposledy upravil vladimir dne 18. 2. 2014 11:36, celkově upraveno 2
vladimir
Expert
Uživatelský avatar

Odeslat příspěvekod Miroslav Pragl 18. 2. 2014 11:22

Vladimir píše:'Date /t'

JEN POZOR !!! date (i %date%) je svazano s regionalnim nastavenim - odladis na ceskem, nepujde v anglickem. Se s tim smir :/

Pytlík píše:Najdi ve Win7 soubor Command.com

Bohuzel nemam po ruce zadny novejsi OS s NTVDM (napr. 32bit Win7). V 64bit Windows command.com samozrejme neni (jak jsem psal vyse - je to dle verze a architektury OS).

//edit:
Nasel jsem 32 bit Win7 a v nem samozrejme i command.com (emulovany v NTVDM):
Kód: Vybrat vše
>command.com
Microsoft(R) Windows DOS
(C)Copyright Microsoft Corp 1990-2001.


MP
Naposledy upravil Miroslav Pragl dne 18. 2. 2014 11:29, celkově upraveno 1
Miroslav Pragl
Expert
Uživatelský avatar

Odeslat příspěvekod vladimir 18. 2. 2014 11:27

neumi_nic píše:[bude chodit na dané pracoviště jednou týdně v nespecifikovanou dobu a připojí ext. hdd jen pro účely zálohy (proto je bat ideální) a poté ho zase odpojí
tedy se jedná o jeden počítač, odladit to tedy není problém, pro české Windows viz výše, pro anglické viz odkaz.
vladimir
Expert
Uživatelský avatar

Odeslat příspěvekod Miroslav Pragl 18. 2. 2014 11:30

jj, to nebyla kritika, jen upozorneni ;-)

MP
Miroslav Pragl
Expert
Uživatelský avatar

Odeslat příspěvekod vladimir 18. 2. 2014 11:37

Ještě přemýšlím:

vladimir píše:
neumi_nic píše:připojí ext. hdd
= možné problémy s písmenem disku
vladimir
Expert
Uživatelský avatar

Odeslat příspěvekod Miroslav Pragl 18. 2. 2014 11:39

projet cyklem vsechna pismena a podle NECEHO (label, obsah) si ho v nich najit.

MP
Miroslav Pragl
Expert
Uživatelský avatar

Odeslat příspěvekod vladimir 18. 2. 2014 11:56

nebo umístit dávku (ať už .cmd, nebo .bat) přímo na externí disk a použít syntaxi s tečkou ( tečka = aktuální adresář)

Kód: Vybrat vše
mkdir .\zaloha_dat\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev
COPY "c:\zaloholovany adresar\*.*" .\zaloha_dat\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev
vladimir
Expert
Uživatelský avatar

Odeslat příspěvekod neumi_nic 18. 2. 2014 12:06

vladimir píše:Pokud použije do názvu adresáře i hodinu, minutu a vteřinu, nebude muset testovat existenci adresáře.
http://it.cestuji.info/bat/datum-cas-do ... ouboru.php

Kód: Vybrat vše
@For /F "tokens=1,2,3,4 delims=. " %%A in ('Date /t') do @(
Set den=%%B
Set mesic=%%C
Set rok=%%D
)

@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set hodina=%%A
Set minuta=%%B
Set sekunda=%%C
)

mkdir d:\zaloha_dat\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev
COPY "c:\zaloholovany adresar\*.*" d:\zaloha_dat\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev


V případě, že trváš na mezerách v názvech adresářů, je nutno použít uvozovky.


... nakonec jsem to napsal takto:

For /F "tokens=1,2,3,4 delims=. " %%A in ('Date /t') do @(
Set den=%%B
Set mesic=%%C
Set rok=%%D
)

@For /F "tokens=1,2,3 delims=:,. " %%A in ('echo %time%') do @(
Set hodina=%%A
Set minuta=%%B
Set sekunda=%%C
)

mkdir j:\pc_stolni\zalohy\pohoda\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev
COPY d:\"pohoda DATA"\*.* j:\pc_stolni\zalohy\pohoda\%rok%_%mesic%_%den%_%hodina%%minuta%%sekunda%_nazev

Problém je ten, že se zkopírují pouze soubory v tom adresáři d:\"pohoda DATA"\*.*
, ale zbývá tam ještě kupa adresářů, které se nezkopírují, co s tim?
neumi_nic
Junior

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků