Forum » Programiranje » batch fajl iz txt
batch fajl iz txt
Blisk ::
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 ::
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:
Č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:
Če boš imel samo ime datoteke nastavljeno se bo izvedlo to:
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 ::
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...
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 ::
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.
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.
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.
Nevem a rabiš za usakega userja pognat notepad al ne.
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 ::
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?
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | program za pomoč pri tiskanju 200+pdf dokumentovOddelek: Pomoč in nasveti | 2281 (1333) | HotBurek |
» | batch skripta požene prevečkratOddelek: Programiranje | 2050 (885) | krneki0001 |
» | [Win Batch] Skripta za ustvarjanje datotekeOddelek: Programiranje | 1109 (913) | sas084 |
» | robocopyOddelek: Programska oprema | 2858 (2297) | driver_x |
» | [bat datoteke] Trenutni datum in uraOddelek: Programiranje | 2489 (2246) | darkolord |