Přejít na obsah


Fotka

programování .bat souboru


  • Pokud chcete vložit odpověď, přihlašte se
13 odpovědí na toto téma

#1 _Tom

_Tom

    Advanced Member

  • Members
  • PipPipPip
  • 659 příspěvků(y)

Publikováno 01 prosinec 2009 - 13:42

Vážení, je to už strašně dávno, kdy jsem naposledy něco bastlil pomocí .bat souboru. Třeba by mi proto mohl někdo zkušenější poradit... Potřebuji .bat soubor, který 1) se přepne do dané složky (složka je daná napevno a nemění se) 2) najde v té složce soubor, který má nejstarší datum poslední změny 3) smaže bez ptaní tento soubor Díky předem za rady!
  • 0

#2 dr.vota

dr.vota

    Advanced Member

  • Members
  • PipPipPip
  • 5 452 příspěvků(y)

Publikováno 01 prosinec 2009 - 18:59

No, jestli to má být pro Windows NT/2000/XP... tak by mohlo fungovat něco takového:
cd [i]složka[/i]
for /F "tokens=*" %%i in ('dir /o-d /b') do set lastfn=%%i
del %lastfn%
Ale pozor na to "bez ptaní", pokud by ta složka neexistovala...za případně smazané jiné soubory neručím :D

edit: oprava na soubory s názvy s mezerami
  • 0

#3 _Tom

_Tom

    Advanced Member

  • Members
  • PipPipPip
  • 659 příspěvků(y)

Publikováno 02 prosinec 2009 - 12:27

Díky! A ještě dotaz - kdyby ten .bat byl uložen ve stejné složce, tak se nemusí nikam přepínat? Jinak řečeno, je akutuální složka defaultně ta, z níž ten .bat spouštím? V tom případě by ale mohlo hrozit, že ten soubor smaže sám sebe - nebo to je nějak zapovězeno?
  • 0

#4 dr.vota

dr.vota

    Advanced Member

  • Members
  • PipPipPip
  • 5 452 příspěvků(y)

Publikováno 02 prosinec 2009 - 13:04

_Tom napsal/a:
Díky! A ještě dotaz - kdyby ten .bat byl uložen ve stejné složce, tak se nemusí nikam přepínat?

Ano.

Jinak řečeno, je akutuální složka defaultně ta, z níž ten .bat spouštím?

Tím bych si nebyl tak 100% jistý. Třeba ve starších Win se to dalo ovlivnit .pif souborem. Vyzkoušet...

V tom případě by ale mohlo hrozit, že ten soubor smaže sám sebe - nebo to je nějak zapovězeno?

To by se asi stát mohlo. Nedá se omezit seznam mazatelných souborů třeba podle přípony? A upravit např. na
'dir *.log /o-d /b'

  • 0

#5 Crocky

Crocky

    Advanced Member

  • Members
  • PipPipPip
  • 477 příspěvků(y)

Publikováno 02 prosinec 2009 - 13:49

A nebo dát tomu .bat naprosto fake datum. Postup např. změním datum v počítači na 2050, edituji bat, změním zpět. Je to ohavný hack (ale ten geniální for cyklus taky :-) )
  • 0

#6 xpj

xpj

    Advanced Member

  • Members
  • PipPipPip
  • 625 příspěvků(y)

Publikováno 02 prosinec 2009 - 14:28

pokud je cesta daná napevno, nevidím důvod, proč by se měl měnit adresář. Použiju tu cestu v příkazech a nemusím se bát, že mi někdo smaže ten baťák...
  • 0
Garmin GPSMAP 60CSx + Topo Czech 1.2
Sony Ericsson K750i + Opera Mini 4.1beta + Handy Geocaching 3.2.5
Apple iPod Nano + Pocket Queries as VCards (via GPSBabel :-)

#7 oldtulak

oldtulak

    Member

  • Members
  • PipPip
  • 25 příspěvků(y)

Publikováno 03 prosinec 2009 - 8:18

když bude ten baťák spuštěný tak se nesmaže, ale operace skončí hláškou o odepření přístupu k souboru ...
  • 0

#8 xpj

xpj

    Advanced Member

  • Members
  • PipPipPip
  • 625 příspěvků(y)

Publikováno 03 prosinec 2009 - 10:30

oldtulak napsal/a:
když bude ten baťák spuštěný tak se nesmaže, ale operace skončí hláškou o odepření přístupu k souboru ...


Nene, smaže se :-) Teď jsem to vyzkoušel (xp).
  • 0
Garmin GPSMAP 60CSx + Topo Czech 1.2
Sony Ericsson K750i + Opera Mini 4.1beta + Handy Geocaching 3.2.5
Apple iPod Nano + Pocket Queries as VCards (via GPSBabel :-)

#9 _Tom

_Tom

    Advanced Member

  • Members
  • PipPipPip
  • 659 příspěvků(y)

Publikováno 03 prosinec 2009 - 21:56

OK, udělal bych to tak, že do své složky udělám další složku a v ní bude bat. Tím bude zajištěno, že existuje ta nadřazená složka a že tedy bat má kde mazat ty soubory a nemůže tudíž smazat nic jiného.

Zápisu

cd složka
for /F "tokens=*" %%i in ('dir /o-d /b') do set lastfn=%%i
del %lastfn%

z výjimkou prvého řádku a prvního slova příkazu v posledním řádku nerozumím. Pokud bych tedy chtěl omezit smazané soubory na ty s určitou příponou (třeba .pri), jak to udělat?

Díky všem!
  • 0

#10 dr.vota

dr.vota

    Advanced Member

  • Members
  • PipPipPip
  • 5 452 příspěvků(y)

Publikováno 04 prosinec 2009 - 1:44

_Tom napsal/a:
OK, udělal bych to tak, že do své složky udělám další složku a v ní bude bat. Tím bude zajištěno, že existuje ta nadřazená složka a že tedy bat má kde mazat ty soubory a nemůže tudíž smazat nic jiného.

Zápisu

cd složka
for /F "tokens=*" %%i in ('dir /o-d /b') do set lastfn=%%i
del %lastfn%

z výjimkou prvého řádku a prvního slova příkazu v posledním řádku nerozumím. Pokud bych tedy chtěl omezit smazané soubory na ty s určitou příponou (třeba .pri), jak to udělat?

Díky všem!


cd složka
for /F "tokens=*" %%i in ('dir *.pri /o-d /b') do set lastfn=%%i
del %lastfn%

  • 0

#11 _Tom

_Tom

    Advanced Member

  • Members
  • PipPipPip
  • 659 příspěvků(y)

Publikováno 04 prosinec 2009 - 11:29

Zdá se, že mazání nefunguje, pokud název souboru obsahuje mezeru! Co s tím?

Soubor to správně identifikuje - nechal jsem si ho vypsat příkazem

echo %lastfn% > "log.txt"

takže je jasné, že je problém v samotném mazání...
  • 0

#12 dr.vota

dr.vota

    Advanced Member

  • Members
  • PipPipPip
  • 5 452 příspěvků(y)

Publikováno 04 prosinec 2009 - 12:27

_Tom napsal/a:
Zdá se, že mazání nefunguje, pokud název souboru obsahuje mezeru! Co s tím?

Soubor to správně identifikuje - nechal jsem si ho vypsat příkazem

echo %lastfn% > "log.txt"

takže je jasné, že je problém v samotném mazání...

a co tohle:
cd složka
for /F "tokens=*" %%i in ('dir *.pri /o-d /b') do set lastfn=%%i
del "%lastfn%"

  • 0

#13 _Tom

_Tom

    Advanced Member

  • Members
  • PipPipPip
  • 659 příspěvků(y)

Publikováno 04 prosinec 2009 - 12:36

To je ono! Díky!
  • 0

#14 klama

klama

    Advanced Member

  • Members
  • PipPipPip
  • 3 865 příspěvků(y)

Publikováno 04 prosinec 2009 - 13:33

Pre istotu doplnam text, ze viem, ze autor chcel bat subor a ten ktory tu je uz uvedeny je perfektny a nijaku mu nemienim "konkurovat" ale dovolujem si upozornit aj na inu moznost riesenia zadania...
Co tak to riesit cez wsh - Windows Script Host
Pokusil som sa zosmolit skript ktory z definovaneho adresara najde najnovsi a potom ho zmaze
Tento text cez notepad ulozit ako ZmazPosledny.js a potom spustit
// JavaScript Document
/* Create the FileSystemObject */
fso = new ActiveXObject("Scripting.FileSystemObject");
/* Tu je adresar z ktoreho chceme zmazat subor */
fsofolder = fso.GetFolder("C:\\temp");
/* Nacitaj zoznam suborov*/
colFiles  = fsofolder.Files;
/* Deklaracia enumeratora */
fc = new Enumerator( colFiles );
/* Pomocna premena pre zoznam suborov  */
var msg = "";
var Lastfile="";
var Lastdate="";
/* Cyklus pre vsetky subory - hladanie najnovsieho */
for (; !fc.atEnd(); fc.moveNext() )
{ 
/*Tu si mozes odfiltrovat podla typu suboru alebo to nedat vobec - vtedy bude hladat medzi vsetkymi subormi*/  
 if (fc.item().Name.indexOf(".htm",0)>-1)
 {
  var f = fso.GetFile( fc.item()) ;
  if (f.DateLastModified >Lastdate) 
  {
   Lastfile=fc.item();
   Lastdate=f.DateCreated;
  }
  msg += fc.item() +"\n";
 }
}
/* Ukaz vsetky subory z adresara */
//WScript.Echo( msg );
/*Zobraz meno suboru, ktory bude zmazany*/
WScript.Echo( Lastfile );
//if (Lastfile>"")
//fso.DeleteFile( Lastfile );


Teraz tam je nastaveny adresar
c:\temp
bude hladat iba subory typu *.html
Zatial ho iba ukaze...
Az odkomentovanim poslednych dvoch riadkov to bude naozaj mazat
  • 0




0 uživatel(ů) prochází toto téma

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

Reklama

Naše nabídka