Win32 batch

Fórumok

Win32 probléma, sajnos magam lámázom. hogyan oldanátok meg ezt, programozás nélkül (tehát csak egy batch file által):

olvasd ki a rendszerdátumot -- fika, ez itt semmi
ezen a néven hozz létre egy könyvtárat adott helyen (pl c gyökér) -- no, ezt (lehetőleg) változók nélkül hogy a rákban lehet?
vonj ki a dátumból !naptárilag helyesen! (szökőév stb) egy napot -- szóval "naptárilag" helyesen :O
a kapott dátum néven szerepelni fog egy mappa, ami törlendő -- itt is az első fele a sötét, második tárgytalan.

mindezt Linux alatt meg tudom csinálni, Win32 alatt pascalban meg tudom csinálni (aztán exe-nek fordítani), viszont programozás nélkül Win32 alatt sajnos nem. segítsetek ki kérlek, nagyon kéne.
köszi

Hozzászólások

Ha linux alatt megy, akkor vélhetően cygwin-bash páros is viszi.

Úgy tudom a windows batch nyelve erre nem képes. (nem biztos)
Na most ha ez így van, akkor mindenképp fel kell tenned valamilyen
értelmezőt! Alapból szerintem javascript meg vbscript értelmező van, de
azt nem tudom, konzolra tudnak e írni.
Én ilyen esetekre perl-t vagy python-t használok, az jó mert van windowsra meg linuxra is. Sok szerencsét!


mindezt Linux alatt meg tudom csinálni, Win32 alatt pascalban meg tudom csinálni (aztán exe-nek fordítani), viszont programozás nélkül Win32 alatt sajnos nem. segítsetek ki kérlek, nagyon kéne.
köszi

Valakinek a napi teendői közé fel kell venni a feladatot.
Az majd összekattingatja az intézőben amikor szükséges...
:-D

--
maszili

http://unxutils.sf.net

idézet az oldalról:
"Here are some ports of common GNU utilities to native Win32. In this context, native means the executables do only depend on the Microsoft C-runtime (msvcrt.dll) and not an emulation layer like that provided by Cygwin tools."

szoktam használni őket, szerintem próbáld ki.

Ahogy már korábban említették: van a Windows-ban egy WSH (Windows Scripting Host) nevű dolog (win98-ban már igen, szvsz NT-ben is) amiben pl VisualBasic-ben írogathatsz dolgokat.

Szvsz változóval/nélkül egy dátumnak megfelelő nevű könyvtárat nemigen tudsz létrehozni.

--
Felnőtt férfi vagyok! Azt teszem amit a nők mondanak.

"változó nélkül"

igen, sajnos erre számítottam - ezért is írtam, hogy (lehetőleg). azért kár, hogy a Win32 alapértelmezett "parancsétege" összességében szerényes képességű. nekem legalábbis annak tűnik, a (gyakorlatilag) C-t értelmező Linux burokhoz képest mindenképpen.

Neked a cscript.exe akarmi.js/vbs kell :-)

Ez defaultban minden dcom98-at tartalmazó windowson rajta van, hacsak a virusok miatt el nem mozgatták/át nem nevezték, le nem törölték, stb...

JScript-ben (JavaScript a'la ms) tudsz letrehozni new Date()-tel date objectet.
new ActiveXObject("Scripting.Filesystem")-mel meg könyvtárat létrehozni, stb.

Magyar Windows 2000 Prof alatt ezzel lehet az aktuális dátumnak megfelelő könyvtárat létrehozni batch fájlból.

datum.cmd

setlocal enableextensions
FOR /F "tokens=1-2 delims= " %%i in ("%DATE%") do set tmp=%%j
FOR /F "tokens=1-3 delims=." %%i in ("%tmp%") do set datum=%%i%%j%%k
mkdir %datum%

Mielőtt megijednél: magyar WXP SP2

mkdir %DATE%

Mivel ezek szerint a DATE változó már eleve tartalmazta a mai dátumot, hogy a setlocal kell-e, ki tudja.

UI. ez eddig szép, de ahhoz, hogy naptárilag helyesen dolgozz vele inkább egy egészre lenne szükséged (adott dátumtól eltelt napok száma) amit a rendszer ha kell egészként, ha kell dátumként kezel.

--
Felnőtt férfi vagyok! Azt teszem amit a nők mondanak.

Nem túl elengáns, de működő megoldás az előző nap kiszámolására:

@echo off

for /f "tokens=1,2,3*" %%i in ("%DATE:.= %") do (
	set YEAR=%%i
	set MONTH=%%j
	set DAY=%%k
)

echo Akt dátum: %YEAR%-%MONTH%-%DAY%

set /A DAY=%DAY%
set /A MONTH=%MONTH%

set /A DAY=%DAY%-1

set /A YEAR_MOD_4=%YEAR%%%4
set /A YEAR_MOD_100=%YEAR%%%100
set /A YEAR_MOD_400=%YEAR%%%400

set /A PREV_MONTH=%MONTH%-1


if %DAY% LEQ 0 (
	if %PREV_MONTH% EQU  0 SET DAY=31
	if %PREV_MONTH% EQU  1 SET DAY=31
	if %PREV_MONTH% EQU  3 SET DAY=31
	if %PREV_MONTH% EQU  4 SET DAY=30
	if %PREV_MONTH% EQU  5 SET DAY=31
	if %PREV_MONTH% EQU  6 SET DAY=30
	if %PREV_MONTH% EQU  7 SET DAY=31
	if %PREV_MONTH% EQU  8 SET DAY=31
	if %PREV_MONTH% EQU  9 SET DAY=30
	if %PREV_MONTH% EQU 10 SET DAY=31
	if %PREV_MONTH% EQU 11 SET DAY=30

	if %PREV_MONTH% EQU 2 (
		if %YEAR_MOD_4% EQU 0 (	
			if %YEAR_MOD_100% EQU 0 (
				if %YEAR_MOD_400% EQU 0 (
					SET DAY=29
				) else (
					SET DAY=28
				)				
			) else (				
				SET DAY=29
			)
		) else (
			SET DAY=28
		)
		
	)
	set MONTH=%PREV_MONTH%
)

if %MONTH% LEQ 0 (
 	set    MONTH=12
 	set /A YEAR=%YEAR%-1
)


if %DAY%   LSS 10 set DAY=0%DAY%
if %MONTH% LSS 10 set MONTH=0%MONTH%


echo Előző nap: %YEAR%-%MONTH%-%DAY% 

Ez tegnap még működött, mára már elromlott.
A gond ezeknél a soroknál van:

set /A DAY=%DAY%
set /A MONTH=%MONTH%

Az a probléma, hogy ha 0-val kezdődik a szám, akkor oktálisnak értelmezi, és ugye 8-9.-én, és 8-9. hónapban gondban vagyunk. Valahogy le kell vágni a kezdeti nullát a %DAY%-ból, meg a %MONTH%-ból, talán valahogy így:


if %DAY% LSS 10 (
	for /f "tokens=1 delims=0" %%i in ("%DAY%") do (
		set DAY=%%i
	)
)

YourJob.vbs


Sub Syntax
  msg = "YourJob.vbs [Dir | /? - help]"
  Wscript.Echo(msg)
  Wscript.Quit(1)
End Sub

Function CreateDir( sPath )
 Dim fso 'File System Object
 set fso = CreateObject("Scripting.FileSystemObject")

 if Not fso.FolderExists( sPath ) then
  Call CreateDir( fso.GetParentFolderName( sPath ) )
  fso.CreateFolder( sPath )
 end if
End Function

Function DeleteDir( sPath )
 Dim fso 
 set fso = CreateObject("Scripting.FileSystemObject")

 if fso.FolderExists( sPath ) then
  fso.DeleteFolder( sPath )
 end if

End Function

Select Case WScript.Arguments.Count
  Case 0
    ' "c:\" the default dir
    strDir = "c:\"
  Case 1
    Select Case WScript.Arguments(0)
      ' "?", "-?" or "/?" invoke help
      Case "?"
        Syntax
      Case "-?"
        Syntax
      Case "/?"
        Syntax
      Case Else
        strDir = WScript.Arguments(0)
    End Select
  Case Else
    ' More than 1 argument is not allowed
    Syntax
End Select

CreateDir(strDir & "\" & Date())

Dim y, m, d, strM, strD

y = Year(Date())
m = Month(Date())
d = Day(Date())

' A feltetelt kell megirni.
'if y & m & d-1 == valid then
  if m < 10 then
  ' mar. -> 3 -> 03
   strM = 0 & m
  end if

  if d < 10 then
   strD = 0 & d
  end if

  DeleteDir(strDir & "\" & y & "." & strM & "." & strD)
'end if

Wscript.Quit(1)

Elso probalkozasra ment. A y, m, d valtozokban ott van az Ev, Ho, Nap a te feladatod kitalalni, hogy melyik az elozo nap.

Udv.: Ben

Egyszer feltettem a keresztkérdést a prog.hu-n, miszerint hogyan
lehet egy adott dátumnál régebbi fájlokat törölni NT4+SP6 alatt.
Na kb. ilyen egyszerű / triviális megoldásokat javasoltak
mint ez a fenti kettő. :)

Ezzel nem a két segítőt akartam piszkálni, csak szerintem
egyszerűen nincsenek (normális) eszközök az ilyen feladatok
megoldására.

--
maszili

Pl. Leirnad Lin alatt hogyan csinalnad?

Adott könyvtárra rekurzívan max 2 könyvtár mélységig a tíz napnál régebben módosult és kis a betűvel kezdődő nevű fájlokra végrehajtva az ls -l parancs

find /home/maszili -maxdepth 2 -ctime -10 -name "a*" -exec ls -l {} \;

(remélem jól írtam :) )

Na ezt nevezem én egyszerűségnek...

--
maszili

Benedicht kódjának futtatásakor is egy sorban mondod el, hogy mit akarsz

Ez igaz...

De előte megírta azt a programot amit bílgécnek kellett volna megtennie a pénzéért. :)

Tehát ennek fényében, ha így nézzük akkor összességében megint oda lyukadunk ki hogy igen windows alatt is meg lehet oldani az ilyen alapvető mindennapos feladatokat de nem gyári eszközökkel hanem mások által megírt (+pénzért megvásárol) vagy saját magunk által írt komlex programokkal. Vagy marad az intézőben való kattingatás.

Bílgéc meg gyémánttal tapétáztatja az újabb kastélyának szobáit. :)

--
maszili

A find sehol nem "gyári eszköz". Amennyiben neked fontos, hogy a customer gépén fent legyen, 2 dolgot tehetsz: feltételezed, hogy fent van (rossz megoldás), vagy előírhatod hogy fent legyen (jó megoldás). Előírni pedig minden olyan platformon előírhatod, ahol egyébként elérhető.

A harmadik lehetőség (sipákolni, meg jajongani afelett, hogy éppen mi van és mi nincs valakinek a telepítő lemezén, illetve hogy amerikai üzletemberek mennyit keresnek) nem visz előre a probléma megoldásában.

A find sehol nem "gyári eszköz".

Hát nemtom...
Én még nem láttam olyan posix oprendszert amiben ne lett
volna benne. Még az Alcatel telefonközpont oprendszerén
(Chorus MiX V.3.2 r4.1.5 COMP-386) is megtalálható.

De én nem konkrétan a find programot hiányolom hanem az olyan
eszközök összességét amelyekkel egyszerűen lehet automatizálni
a mindennapos feladatokat. A keresőkutya nem tartozik ezek közé. :)

Amennyiben neked fontos, hogy a customer gépén fent legyen, 2 dolgot tehetsz: feltételezed, hogy fent van (rossz megoldás), vagy előírhatod hogy fent legyen (jó megoldás). Előírni pedig minden olyan platformon előírhatod, ahol egyébként elérhető.

Namost ebben az esetben én vagyok a customer.

- Feltételezem hogy van a vindózban olyan eszköz ami segíti a munkámat. (tévedtem...)

- Előírhatom bílgécnek hogy tegyen használható eszközöket az általa sok pénzért árult rendszerbe :) (eredménytelen...)

A harmadik lehetőség (sipákolni, meg jajongani afelett, hogy éppen mi van és mi nincs valakinek a telepítő lemezén, illetve hogy amerikai üzletemberek mennyit keresnek) nem visz előre a probléma megoldásában.

Én úgy vagyok vele, hogy ha fizetek valamiért akkor azt szeretném használni is. Nem pedig kerülőutakon +költséggel+energiával megoldani azt a problémát amit a pénzért vett megoldásnak kellene elvégeznie.

--
maszili

Az, hogy neked hieroglifa, arrol en nem tehetek. Persze irhattam volna js-ben is, igazad van.

Az hogy ket oldal, az azert van, mert tobb funkcionalitast tettem bele. Ha csak a lenyegre torekszem, par sorbol kijott volna ez is.

Az egyszeruseg szubjektiv dolog, ahogy irtad is. Amit irtam neked nem egyszerubb, mert csak 'hieroglifakat' latsz, es ez visszafele is mukodhet(valakinek a tied hieroglifa).
Masreszt az en megoldasom, imo sokkal de sokkal atlathatobb, konnyebb modositani, felhasznalobaratabb, es kb. ugyanannyi idobe(ha nem kevesebb, ha minimalis programozasi tudasa van az illetonek) telik megtanulni azt a szintakszist, mint a tiedet, ami nem egy konkret programozasi nyelvhez hasonlit, es pipeokat hasznal. A wsh-hoz a dokumentacio egy helyen van, peldakkal teletuzdelve.

uhumm, azt a tiz sort igazan beleirhattad volna, ami az elozo napot kiszamolja:) az a plusz funkcionalitás pedig khm - lóf*sz.

kevesebb "hieroglifát"..

rmdir `date -d yesterday +%Y-%m-%d`
mkdir `date +%Y-%m-%d`

..még könnyebb átlátni?

más kérdés, hogy csak egy programozónak elég megtanulni egy új nyelv szintaktikáját - ami egyébként kb. ahhoz elég, hogy gányoljon -, egy hozzá nem értőnek mondhatod, hogy ez a ciklus szintaktikája, ez meg a feltételé. próbálj meg más paradigmájú nyelven programozni, mint amilyenben tudsz, ez kb. olyan.

Hmm, en lennek az aki lusta vagyok normalis megoldast adni?
Ha igen, akkor kikerem magamnak. :D
Nem vagyok hajlando teljes megoldast csinalni, mert tokeletesen megfelelo alapot adtam ahhoz, hogy ezezn az uton meg tudja csinalni a feladatot - csak az egy napos kivonast kell megcsinalnia, azt irta letudja programozni. Masreszt ugy tanul, ha probalkozik, legalabb a nap kiszamolasat csinalja meg. Ugyerzem, ez a megfelelo segitseg, nem az ha segge ala tolom az egesz feladat megoldasat.

azt a tiz sort igazan beleirhattad volna, ami az elozo napot kiszamolja:)

Mint fentebb irtam, o is dolgozzon meg erte.

az a plusz funkcionalitás pedig khm - lóf*sz
Lóf*sz, de meg igy is sokkal tobb, mint az az egysoros lokuki. ;)

egy hozzá nem értőnek mondhatod, hogy ez a ciklus szintaktikája, ez meg a feltételé

Egy hozza nem ertonek magyarazhatod, hogyan mukodnek a pipeok, es esetenkent tobb parancs kulonbozo kapcsoloinak megtanulasa sem olyan egyszeru.
Ezert mondtam, hogy a ketto megtanulasa kb. ugyanolyan konnyu/nehez.

feljebbire is válaszolva:

Ugyerzem, ez a megfelelo segitseg, nem az ha segge ala tolom az egesz feladat megoldasat.
mondjuk ez már filozófia kérdése; van aki a teljes megoldásból is tanul, mert nem csak lemásolja; én például, ha valaki olyan kódot/szkriptet ír, amiben számomra ismeretlen dolog van, sokszor megnézem, hogy az miért is jó úgy.

ennek fényében így visszavonom, hogy lusta lennél:), de a 'megadott könyvtárban végzi a dolgát' és a 'syntax' bloat:)-funkciók nem érnek annyit, mint a lényegi rész, ráadásul azt sem tudtam meg, hogy ezen a nyelven hogy hívják a maradékos osztást, és azt se, hogy neadjisten hogyan kell (konstans) tömböt definiálni.. :)

Egy hozza nem ertonek magyarazhatod, hogyan mukodnek a pipeok, es esetenkent tobb parancs kulonbozo kapcsoloinak megtanulasa sem olyan egyszeru.
Ezert mondtam, hogy a ketto megtanulasa kb. ugyanolyan konnyu/nehez.

pipe-ok ugyan nem voltak, max. implicit (a backtick), meg a pipe magában sokszor nem elég, viszont nagy segítség; nekem eszem ágában se lenne ilyen bash-one-linereket akár perlben elágazással/ciklussal kódolni, ha már ismerek jópár parancsot kapcsolóstul. esetleg nem-unix alatt, kissé bosszankodva.

ráadásul azt sem tudtam meg, hogy ezen a nyelven hogy hívják a maradékos osztást, és azt se, hogy neadjisten hogyan kell (konstans) tömböt definiálni.. :)

Mivel nem is neked keszult. Nem neked irtam. Aki akarja, utanna tud nezni. ;)

nekem eszem ágában se lenne ilyen bash-one-linereket akár perlben elágazással/ciklussal kódolni, ha már ismerek jópár parancsot kapcsolóstul.

Izlesek es pofonok, nekem jobban bejonnek a tobbsoros, viszont atlathatobb scriptek.

Eléggé liberálisan értelmezed a default install fogalmát :-)
Módosíthatod a telepítő CD-t, de akkor az már nem a gyári CD, és az arról történő install az én fogalmaim szerint nem nevezhető default install-nak. Max akkor, ha csak a service pack-et slipstream-elted rá, az is csak azért, mert van olyan gyári telepítő CD, amin ugyanezt megcsinálták.

mindenhol "másik fél által készített eszköz" a find, ha nem te írtad

Ebben az esetben a másik fél az aki az eszközt készítette az
egyik fél meg az oprendszert. Vagyis az ms :)

Vagyis egy UNIX/Linux/*BSD rendszer részét képezik az ilyen
hasznos kis eszközök, ellentétben a má$ik rendszerrel...

--
maszili

>> Ebben az esetben a másik fél az aki az eszközt készítette az egyik fél meg az oprendszert.
mindegyik esetben különbözik a két fél

>> Vagyis egy UNIX/Linux/*BSD rendszer részét képezik az ilyen hasznos kis eszközök
akkor képezik a rendszer részét, ha telepítve vannak. akkor vannak telepítve, ha éppen úgy akarom.

Azt aláírom hogy valószínüleg nem Linus írta a find-ot. :)
De az adott disztribúció tartalmazza alap esetben a find-ot.

És valószínüleg nem Bill Gates írta a findutils-t sem :)
de a vindóz nem tartalmazza a findutils-t.
Mehetek az internetre turkálni a megfelelő eszöz után.
Viszont van helyette szimatoló kiskutya azért a pénzért amibe
kerül egy vindóz. :-D

Így már érthető hogy mi a bajom az egésszel?

--
maszili

Ilyenkor hol vannak a winesek a tanácsaikkal? :-P

Mennyi szép megoldás....
Nemazért srácok, de 15 perc gugli után összehoztam ezt:

akarmi.js:



function date2str(d)
{
    return d.getYear()+'.'+(d.getMonth()+1)+'.'+d.getDate()+'.';
}

function getYesterday()
{
    var yesterday=new Date();
    yesterday.setDate(yesterday.getDate()-1);

    return date2str(yesterday);
}

function getToday()
{
    return date2str(new Date());
}

var FSO = WScript.CreateObject("Scripting.FileSystemObject");

try 
{
    FSO.CreateFolder(getToday());
    FSO.DeleteFolder(getYesterday());
} catch (err)
{ 
    WScript.Echo("ERROR");
}

Elvileg simán futnia kell mint egy .bat-nak, ha mégsem, akkor:
wscript akarmi.js

Ha konzolos végrehajtást akarsz, akkor:
cscript akarmi.js
Ilyenkor hiba esetén konzolra ír, és nem MessageBox-ba.

Ja, és a könyvtárakat az aktuális könyvtárba hozza létre, de gondolom ezt átírni már megy egyedül is... :)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Ja, és ennyit arról, hogy: win alatt nem lehet, csak külsős cuccokkal, meg Bill Gates inkább ezt írta volna meg, stb...

Gyakorlatilag bármit lehet, registry buherálástól az excel vezérlésig.
Persze VBscripthez könnyebb doksit találni mint JScripthez, csak attól hányok...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Ezzel az erővel kérhetnéd win 3.1 alatt is.
Sőt én is kitalálhatnám, hogy mi minden működjön egy 96-ban kiadott linuxon...

Maradjunk annyiban, hogy még 95-re, és NT4-re is fel lehet rakni, 98-tól fölfelé meg benne van a normal installban.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

A find az elég régóta standard eszköz a UNIX-os világban, és igen, 96-ban is volt...
Én speciel a gnufind-től kapok néha agybajt, mert a standard (PPOSIX) dolgokon felüli "feature"-ök igen szívesen használt dolgok Linux alatt -- viszont totálisan hordozhatatlanok...
A dátumaritmetika (adott dátum +/- x nap) témára legutóbb awk-ban alkottam valamit, most meg "hány napos volt az előző hónap" című kérdést veséztem Excel-ben... Baromi randa lett, de műx :-/

Lehet, hogy a find standard ezköz, csak semmi köze az adott problémához. Az egy más probléma kapcsán jött fel, amit maszili vetett fel, így fogalmazzunk úgy, hogy enyhén offtopic...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Date van win alatt.
Az persze lehet, hogy a kimenete nem oylan mint amit te szeretnél, és nem tudod parse-olni. Az egy Linuxos megoldás lenne.

Írj egy VBScriptet, ami úgy adja a dátumot ahogy te szeretnéd, az meg egy Wines megoldás lesz.

Az persze más kérdés, kinek melyik kényelmesebb. Azért komolyabb scripteket ilyen Linuxos trükközésekkel nehéz, illetve csúnya megoldani, mert nem a megszokott programozási gondolkodásmódot igényli.

Nem véletlen, hogy egyre többen használnak ilyen dolgokra pythont meg perlt meg hasonló nyelveket bash+Awk scriptek helyett.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Tehát a "tegnap" parancsot, mely Linuxon a "date --yesterday" nagyjából, és más UNIX-ok date parancsát (POSIX ugye...) használva sem túl problémás, elő kell venni egy plusz értelmezőt (mert a shell-je olyan amilyen), és azzal lefuttatni egy Windows-only programot, amit meg is köll írni... A rugalmas parancsok használata nekem jobban "bejön", mint az írjunk mindenre programot... Ötlet... A fontosabb UNIX utility-ket írassuk/írjuk meg VBScriptben :-)) Kezdjük pl. az ls VBScriptes implementálásával :-)) (Shell scriptelésnél szinte "kötelező" a diákkal megíratni a dir parancsot...)

:)
Én nem mondtam, hogy szerintem jó, hogy mindent nekem kell megírni.

Mellesleg van date --tegnapelőtt-előtt, vagy date --kéthétteltegnapelőtt? Mert amint kitalálok egy olyat ami nincs, máris jön a parse-olás.

Pl szerintem nem szép megoldás, mikor az ls -l kimenetét awk-val kell parse-olnom, mert nekem csak bizonyos oszlopok kellenek...
Milyen jó volna valalmi form string megadási lehetőség. Különösen, ha pl space-ek is vannak a filenévben.

Sokszor van hasonló gondom, mikor egy programozósabb scriptnyelvvel szépen meg tudnám oldani, bash alatt meg megy a gányolás.

Persze sokszor meg írok egy 4 soros scriptet, és eszembe nem jut egy python-t indítani.
Mindennek megvannak a maga erősségei, illetve gyengéi.

Nekem csak az olyan kijelentésekkel van gondom, hogy a Win szar mert nem lehet megcsinálni. De meglehet...

A windows only program meg nem érv. Ezzel az erővel dobjunk ki minden nem *nix rendszert ugye? Vagy netán a VMS scriptek hordozhatóak?

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

A date --tegnapelőtt sima ügy: két date van, az egyik kiírja az EPOCH-óta eltelt másodperceket, amiből $(($(date...)-24*3600)) -zal kiszámolod a tegnapelőtti napot, majd ezt a számot odaadod egy másik date-nek, ami szééépen McFormázza :-)
Az ls -l | awk... "fonéma" teljesen normális dolog, két, a saját dolgát jól tudó szoftver együttműködése -- erről is szól a UNIX-filozófia.

"Az ls -l | awk... "fonéma" teljesen normális dolog, két, a saját dolgát jól tudó szoftver együttműködése -- erről is szól a UNIX-filozófia."

Lehet, hogy normális, de szerintem nem szép. :)

De pont ezt próbálom mondani, hogy filozófia kérdése.
Ennek is meg vannak az előnyei és a hátrányai. Aki azt mondja, hogy a bash scriptekkel, meg awk-val mindent tökéletesen meg lehet oldani, és ennél jobb nem is kell, mert úgy tökéletes ahogy van, az vagy hülye, vagy még sose használta...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Awk-ban mindent meg lehet csinálni. Amit nem, azt Perl-ben biztosan. Amit Perl-ben sem, azt nem lehet megcsinálni :-)) Tartja a kissé kicsavart mondás...

Aki awk-ot használ az szerinted hülye, vagy legalábbis nem tud arról, hogy normálisabban is lehet csinálni... Ez érdekes, pláne, ha tudjuk, hogy az awk betűszó mit is takar: Al Aho, Peter Weinberger, és Brian Kernighan urak nevének a kezdőbetűi...
Nem tudom, mekkora awk-scripthez volt eddig szerencséd -- láttam brutál nagy dolgokat is awk-ban leprogramozva (címadatok normalizálása/adattisztítása) -- párszáz sorban, és hidd el, az írója nem volt hülye, és a megoldás ott, abban a környezetben tökéletes volt: rugalmas, jól (ön)dokumentált, a meglévő eszközökre támaszkodó, az elvárt fejlesztési-karbantartási, illetve futási szinteket teljesítette.

A shell, mint programozást segítő eszköz(!) arra szolgál, hogy az egyes részfeladatokat végző programok között egyfajta ragasztó legyen, és a szükséges változó, elágazás, illetve cikluskezelést megvalósítsa.
Ezt tudja, méghozzá igen jól.

Az awk egy lehetséges eszköz az adatok feldolgozására, ami lehet, hogy adott feladatnál tökéletes megoldást nyújt, míg egy másiknál inkább sed-et, vagy mást kell használni a (közel) optimális megoldáshoz.

Ezzel az erővel kérhetnéd win 3.1 alatt is.

Nem azt nem kérem. :)
De az NT4 az egy szerver operációs rendszer! :) vagy mi...
A file kezelés meg egy elég régi dolog, kb a fájlrendszer
létezésével egyidős.

Sőt én is kitalálhatnám, hogy mi minden működjön egy 96-ban kiadott linuxon...

Én nem azt kértem hogy minden működjön, csak az ilyen
alapvető problémákra legyen gyári megoldás.

--
maszili

Látom szereted a csúsztatásokat...

NT4-es filekezeléssel semmi gond nincs, legalábbis az adott probléma kapcsán.
A vita arról alakult ki, hogy mit lehet, és mit nem megoldani scriptekkel.
Magyarul arról, hogy hol erősebb a scriptezés mint eszköz: Linuxon vagy Windowson.
Mondjuk egyértelműen Linuxon, bár ez nem annyira egyértelmű, pl nem vagyok benne biztos, hogy bash, meg awk scriptekkel lehetne hálózatot turkálni (connect, send, recieve), vagy az OpenOffice-t vezérelni...

Hogy mitől lesz jó egy szerver operációs rendszer, azon lehetne vitatkozni, de maradjunk annyiban, hogy a scriptezés erőssége csak az egyik ezek közül.
Egy másik a driver ellátottság, amiben egy 96-97-es linux nem állt túl jól...

Nem vagyok egy M$ fan, de unom már az olyan hozzászólásokat, hogy az XP szar, mert ezt, meg ezt nem lehet benne megoldani, miközben meg lehet, csak az illető nem tudja hogyan.

Az meg pláne nevetséges, mikor kiderül, hogy megoldható, és akkor előkerül, hogy bezzeg NT4-en nem lehetett. Meddig megyünk így vissza, DOS 1.0-ig?

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

OOo-t miért akarsz parancssoros scriptből vezérelni? (Pythonban tán lehet...) Azok a feladatok, amihez office-jellegű tudás kell, és scripteléssel kell fűszerezni, nem biztos, hogy Linux-on OOo-val oldandó meg. Feladathoz az eszközt... Pl. 123456 csv-t xls-be konvertálni, számolt mezőkkel -- win alatt az Excelt-köll csatasorba állítani. Linux alatt meg elővenni a Perl-t, van XLS-t író meg olvasó modul, és azt használni...

Csak egy példa volt.

Egyébként nekem már kellett volna win alatt excelt kezelni scriptből, mert a makró kevésnek bizonyúlt.
Igaz, a feladat egyszeri dolog volt, így megoldottam kézzel, és makrókkal.
De el tudok képzelni olyan feladatot, mikor OOo-val is jól jön.

Nyilván meg lehet oldani python, perl vagy stb használatával, csak ugye itt egyesek azt vetik a win szemére, hogy csak 3rd party cuccokkal lehet használni. Perl, python meg szerintem 3rd party.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

NT4-es filekezeléssel semmi gond nincs, legalábbis az adott probléma kapcsán.

Az én meglátásom szerint probléma mert nincsenek olyan eszközök amelyekkel automatizálni lehetne bizonyos fájlműveleteket. Egy oprendszer fájlrendszeréhez hozzátartoznak azok az eszközök amikkel műveleteket végezhetek az adott fájlrendszeren.

...pl nem vagyok benne biztos, hogy bash, meg awk scriptekkel lehetne hálózatot turkálni (connect, send, recieve),

Lehet hogy nincs is rá szükség mert a gyökér fáljrendszerbe azt és oda illesztek be amit csak akarok. Nincs szükség ezekre: (connect, send, recieve)

Ha vannak olyan programok amik megoldják ezeket a részproblémákat (egy posix rendszerben általában vannak) akkor megoldható az eredeti összetett probléma is.

vagy az OpenOffice-t vezérelni...

Másrészről meg a UNIX szkript egy olyan eszköz amivel meglévő programokat tudok úgy összekapcsolni hogy azok egy nagyobb, komplexeb feladatot oldjanak meg. Ha az OpenOffice fel van készítve erre akkor minden további nélkül lehet szkript által használni.

Hogy mitől lesz jó egy szerver operációs rendszer, azon lehetne vitatkozni, de maradjunk annyiban, hogy a scriptezés erőssége csak az egyik ezek közül.

Szerintem nagyon sokat számít az is hogy vannak-e és ha igen akkor milyen eszközök vannak a mindennapos használat során felmerült problémák megoldására.

Egy másik a driver ellátottság, amiben egy 96-97-es linux nem állt túl jól...

Ezt inkább az adott hardver gyártójának kellene mondani.
Írjon driver-t vagy adjon dokumentációt.

Az meg pláne nevetséges, mikor kiderül, hogy megoldható, és akkor előkerül, hogy bezzeg NT4-en nem lehetett. Meddig megyünk így vissza, DOS 1.0-ig?

Amikor szükségem lett volna rá akkor NT4-en kellett volna megoldani ezt az alapvető mindennapos feladatot. Gyári eszközök NEM álltak rendelkezésre.

Most boruljak le bílgéc előtt hogy 2006 -ban a keresőkutya mellé megcsinálták hogy mostmár látványbézik programot is lehet írni egy rutinfeladatra?

--
maszili

Látom nem érted, hogy teljesen más szemlélet.

Ez kb olyan mintha a javan számonkérnéd, hogy nincs mutatóaritmetika.

Te azt mondod, hogy meglévő programokat akarsz összekötni, a win készitői meg azt mondják, hogy COM objekteket akarnak hivogatni.
Nem néztem utána de nyilván megoldható a find-es probléma is így.

Driverekről meg annyit, hogy engem marhára nem érdekel miért nincsenek, ha kellenének. Nincsenek és kész.

Arról megint lehetne vitatkozni, hogy mi számít alapvető mindennapos feladatnak.

De tudod mit, csak, hogy végre megnyugodjál: Az NT4 szar. Most jobb?
Mint ahogy az összes többi OS szar. Mert mindben van valami, ami nem úgy van megoldva, ahogy nekem kell, vagy nekem logikus, és mindben van valami amit nem tudok megoldani, míg egy másikban igen...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Arról megint lehetne vitatkozni, hogy mi számít alapvető mindennapos feladatnak.

Szerintem a fájlrendszerhez való hozzáférés, fájműveletek (létrehozás, törlés, keresés, stb...) elég mindennapos dolgok.
Csakhát a vindóz érában nincs kultúrája a fájlrendszerek. :)
Van egy cé, azon belül egy windows aztán abba bele van lapátolva minden. :)

Ha már fájlrendszer... akkor hogyan oldanád meg a Windows NT4 Server + SP6 alatt a fájlrendszerkvótát egy adott könyvtárstuktúrára, de szigorúan csak a gyári telepítő cd-t használva?! Talán a vidóz 2003-ban már van rá lehetőség :)

Csak azt ne mondd, hogy ez nem egy mindennapos feladat... pl. képzelj el egy fájlszervert.

--
maszili

Komolyan mindjárt sírok....
Azt hiszem ez az a pont, ami után meddő a vita. (Sőt valójában az a pont már régen elmúlt, de most untam meg.)

Te komolyan azt állítod, hogy nincsenek olyan alapvető dolgok, amiket egy 96-os linuxszal nem lehet megoldani, NT-vel meg igen?

Ez költői kérdés, ne válaszolj. Illetve válaszolhatsz, de én nem fogok...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Te komolyan azt állítod, hogy nincsenek olyan alapvető dolgok, amiket egy 96-os linuxszal nem lehet megoldani, NT-vel meg igen?

Nem! (biztos csak elírtad a válaszod) Én azt állítom hogy bílgéc eladta szervernek a vindóz entét úgy hogy sok alapvető funkciót nem tudott. Holott korabeli UNIX-ok tudták azokat a funkciókat!

--
maszili

A szemlélet valóban más: Win alatt klikkelj, és csináld azt, amit a fejlesztői megengednek neked, vagy programozz, hívogass com-objecteket, ha tudod, hogyan kell, eszközöd defaultban mi is van a fejlesztéshez? Jó, persze... A mindennapi fájlrendszer-adminoláshoz -és sokminden máshoz- sincs UNIX-os szemmel könnyen, logikusan használható eszköze a Windows-nak. Az egerészőbajnokok meg a ps -axu foo | grep bar | grep -v bar | sort -u dologtól kapnak heveny rekeszizomgörcsöt :-) Én meg attól, hogy egyszerű dolgoknak mily bonyolult megoldása van win alatt. Mondjuk kétféle...

Szerintem egy script megírása már kimeríti a programozás fogalmát.
Persze ettől még senki ne jelentkezzen programozónak. :)

A win arra ment rá, hogy lehetőleg úgy lehessen megoldani az alap dolgokat, hogy ne nagyon kelljen érteni hozzá. Ehhez meg a kattingatás módszere ideális.
Bármely nem technofób ember be tud lőni egy win servert, hogy a 8 fős cégének elég legyen.
Ennek persze megvan az a hátránya, hogy bizonyos dolgokat logikátlan, bonyolult módon kell beállítani.
Mivel véges idő alatt fejlesztették a rendszert, nyilván vannak dolgok amiben nem túl erős, többek között a parancssor elég gyenge.

Persze kapcsoltak ők is, lassan kezd a dolog használható lenni, a monad elég ütősnek tűnik pl.

Persze lehet sírni, hogy a m$ szar, szemét, szar alak, mert úgy próbálja eladni a kiscéges trágyát, hogy jó az még a pentagonba is.
Hát könyörgöm, úgy mégse hirdetheti, hogy "tudjuk, hogy szar, de neked elég".
Vagy netán a RedHat, a Novell, meg a többi úgy hirdeti a linuxot, hogy "szerver operációs rendszer, felejtsd el desktopon"?

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o