» »

batch fajl iz txt

batch fajl iz txt

1
2
»

Blisk ::

sas084 je izjavil:

Nevem točno kšno funkcjonalnost rabiš. Ta koda ka sm ti jo napisu pobriše use userje iz fajla razn zadnjega, ob predpostavki da maš userje brez presledkov in vsakega v svoji vrstici. Kako točno maš txt fajl narejen?

točno tako kot si napisal.
uzerji so eden za drugim v stolpcu.
samo da jih ne briše, verjetno je problem v pravicah skripte, ki jih rabi za kreiranje začasne datoteke

sas084 ::

To se mi zdi malo verjetno če poganjaš skripto kot admin da nebi meu pravic delanja začasnih fajlov. Je pa res da morš met full path do LOGON.txt in temp fajla za more in move ukaze, če batch in LOGON.txt nista v istem direktoriju, čene ti zadeva sigurno nebo delala ker iščeta fajle v trenutnem delovnem direktoriju.

Blisk ::

sas084 je izjavil:

To se mi zdi malo verjetno če poganjaš skripto kot admin da nebi meu pravic delanja začasnih fajlov. Je pa res da morš met full path do LOGON.txt in temp fajla za more in move ukaze, če batch in LOGON.txt nista v istem direktoriju, čene ti zadeva sigurno nebo delala ker iščeta fajle v trenutnem delovnem direktoriju.

ne to poganjam kot system user, ampak ni panike, sem nastavil, da se ob nedeljah briše ta txt fajl.

Zgodovina sprememb…

  • spremenil: Blisk ()

sas084 ::

Tud to je opcija, drugač pa pač nastavš samo absolutno pot do LOGON.txt pa bi reč mogla delat iz bilokje. Primer:
::absolutna pot do txt-ja
SET filename=c:\LOGON.txt
SET newfilename=%filename%.bak
SET count=0

FOR /f %%a in (%filename%) do (
	SET /a count += 1
)

SET /a count -= 1

IF %count% GTR 1 (
	more +%count% %filename% > %newfilename%
	move /Y %newfilename% %filename%
)

Blisk ::

saj kolikor vidim je zadeva identična....

echo %username%>> c:\LOGON.TXT
FOR /f %%a in (%filename%) do (
    SET /a count += 1
)
 
SET /a count -= 1
 
IF %count% GTR 1 (
    more +%count% %filename% > %newfilename%
    move /Y %newfilename% %filename%
)

sas084 ::

Sej koda je identična, fora je samo v setanju filename-a:
SET filename=c:\LOGON.txt
SET newfilename=%filename%.bak

Če setiraš absolutno pot do LOGON.txt potem lahko poganjaš batch iz katerega koli direktorija, pa bosta more in move ukaza delala ker bosta pač vzela absolutno pot do fajla. Če pa boš meu setano samo ime fajla, potem pa bosta more in move ukaz probala operirat nad fajlom v trenutnem delovnem direktoriju. Evo primer: maš fajl c:\LOGON.txt, recimo pa da batch skripto poganjaš iz c:\skripta. Reč bo lepo delovala dokler ne bo prišla do more in move ukaza. Če boš meu absolutno pot nastavljeno za filename, potem se bo izvedlo to:
more +%count% c:\LOGON.txt > c:\LOGON.txt.bak
move /Y c:\LOGON.txt.bak c:\LOGON.txt

Če boš imel samo ime datoteke nastavljeno se bo izvedlo to:
more +%count% c:\skripta\LOGON.txt > c:\skripta\LOGON.txt.bak
move /Y c:\skripta\LOGON.txt.bak c:\skripta\LOGON.txt

Blisk ::

ok hvala bom stestiral

Blisk ::

Ali mogoče kdo ve, kako naredim naprimer, da če najde določena imena v txt datoteki, ki se ujemajo z imeni direktorijev, potem naredi to in to?

sas084 ::

Uporabiš dir z opcijami ki ti vrne samo imena direktorijev, potem pa jih primerjaš z imeni:
dir /B /AD

Blisk ::

to pa ne razumem kako?

naprimer v tct datoteki imam napisana imena map
jaka
miha
janko

in če mi batch fajl najde to ime v mapi mi požene notepad, naprimer...

Zgodovina sprememb…

  • spremenil: Blisk ()

sas084 ::

Ah pozab, jst sm te narobe razumel, mislil sem da morš imena map brat iz diska ne iz fajla :). Najprej bereš userje iz txt-ja (kar že delaš), potem za vsakega userja bereš imena map iz drugega txt-ja ter jih primerjaš z userjem.

Blisk ::

sas084 je izjavil:

Ah pozab, jst sm te narobe razumel, mislil sem da morš imena map brat iz diska ne iz fajla :). Najprej bereš userje iz txt-ja (kar že delaš), potem za vsakega userja bereš imena map iz drugega txt-ja ter jih primerjaš z userjem.


v bistvu berem več userjev iz ene txt datoteke in če najdem userja se mi zažene naprimer notepad.

%SystemRoot%\system32\cmd.exe /c "FOR /F "tokens=1 delims=," %%f in (\\mojserver\Arhiva\log.txt) DO if exist "C:\Users\%%f\Documents" (End) else (goto A)"
:A
Notepad.exe
pause

:End
Exit


Problem je, ker tole ne dela, če bi bil samo en uporabnik bi delalo tako jih je pa več in ko primerja s prvim, ki ne ustreza pogoju, se notepad zažene.
tale batch fajl naredi tolikokrat ukaz kot je userjev v txt datoteki. Jaz pa bi rabil, da prebere vse userje in če najde ustreznega v txt datoteki in njegovo mapo, da požene določeno zadevo.

b3D_950 ::

Zakaj pa ne uporabiš vbs/powershell skripte?
Imaš že ogromno examplov narejenih, samo sestavljaš skupaj.

Sub ShowFolderList(folderspec)
    Dim fs, f, f1, fc, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(folderspec)
    Set fc = f.SubFolders
    For Each f1 in fc
        s = s & f1.name 
        s = s &  vbCrLf
    Next
    MsgBox s
End Sub


Dim objShell
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run("""c:\Program Files\Mozilla Firefox\firefox.exe""")
Set objShell = Nothing


Set objNet = CreateObject("WScript.NetWork") 

strInfo = "User Name is     " & objNet.UserName & vbCRLF & _
          "Computer Name is " & objNet.ComputerName & vbCRLF & _
          "Domain Name is   " & objNet.UserDomain

MsgBox strInfo

Zgodovina sprememb…

  • spremenil: b3D_950 ()

Blisk ::

Ker se ne spoznam na programiranje in vbs skripte še tole z batch fajli komaj skupaj sklamfam, vbsa pa ne razumem nič :)

Tak da tole kar si mi dal mi ni nič jasno.

Zgodovina sprememb…

  • spremenil: Blisk ()

sas084 ::

Sigurno se ti splača naštudirat vbs kot je reku rb750, splih če boš delal bolj komplicirane skripte ker se ti reči poenostavijo. Če pa se misleš z batchom zajebavat potem pa probi tko da greš čez vse userje in primerjaš če obstaja mapa, če ne obstaja ga daš v eno lokalno spremenljivko. Na koncu greš čez use userje v tej lokalni spremenljivki ter za posameznega odpreš notepad.

Setlocal EnableDelayedExpansion
FOR /F "tokens=1 delims=," %%f in (\\mojserver\Arhiva\log.txt) DO (
    if not exist "C:\Users\%%f\Documents" (
        SET users=!users!%%f,
    )
)

FOR %%b in (%users%) do (
    ::notepad,...
)


Nevem a rabiš za usakega userja pognat notepad al ne.

b3D_950 ::

Blisk je izjavil:

sas084 je izjavil:

Mislm da je najbol simpl da si nardiš en Scheduled Tasks ki ti bo poganjal tvoj batch file.


saj sem pa ne dela, ni mi jasno zakaj ga task scheduler ne požene, ker na roke dela vedno



Za test: na smb/cifs serverju (\\mojserver) kreiraj folder z full pravicami za vse (everyone) in potem bi skoraj moralo delat... A ti kakšn error prikaže? npr. 0x1?
1
2
»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

program za pomoč pri tiskanju 200+pdf dokumentov

Oddelek: Pomoč in nasveti
251782 (834) HotBurek
»

batch skripta požene prevečkrat

Oddelek: Programiranje
171767 (602) krneki0001
»

[Win Batch] Skripta za ustvarjanje datoteke

Oddelek: Programiranje
5942 (746) sas084
»

robocopy

Oddelek: Programska oprema
242390 (1829) sammy73
»

[bat datoteke] Trenutni datum in ura

Oddelek: Programiranje
112191 (1948) darkolord

Več podobnih tem