Stránka 1 z 1

Přejmenování souboru s náhodným přidáním znaků

Napsal: pon 6. zář 2004, 13:38
od J X P
Zdar lidi, o5 jsem si pro vás přiipravil takovou lahůdku. Potřebovat bych v adresáři přejmenovat všechny soubory, ale zároveň bych kvůli řazení potřeboval přidat na začátek náhodné číslo, mělo by to vypadat asi takhle

original name.txt ----> 001 original name.txt

to číslo by se mělo generovat náhodně a při každém startu programu by mělo to číslo program nejdřív odstranit a pak znovu náhodně přidat. Jde o to, že těch souborů mám v adresáři hodně a ělat to ručně je pakárna.

Poradíte něco ?

Díky

Napsal: pon 6. zář 2004, 13:42
od pavel.minarik
no a v jakém jazyku? proč náhodně, proč ne inkrementálně :?

Napsal: pon 6. zář 2004, 13:50
od J X P
to je kvůli následnému náhodnému řazení. bohužel ten program pro který to je neumí řadit jinak než podle názvu a to se dá obejít jedině přidání toho řetězce na začátku souboru.

Našel jsem jeden nástroj, který umí toto přidat, ale nakonec souboru, což je mi na nic. A když rovnou automaticky přejmenuju i originální soubor tak pak zase nevím co v něm původně je.

funguje to takto

original name.txt -----> list_001.txt

kdyby to umělo dát dopředu .... :-(

Napsal: pon 6. zář 2004, 14:03
od Jiri Drak
Takovyhle vymozenosti si nejspis budes muset naprogramovat sam.

Napsal: pon 6. zář 2004, 14:08
od J X P
Dobra tedy ..... z jednoduche otazky prejdeme na ....

a jak se programuje ? :-)

Vazne, bohuzel programovani neni moje silna stranka, ne ze bych nechtel, ale proste nevim jak na to, takze tudy cesta nevede. Spoleham na to, ze je na svete dost programatoru, kteri treba jiz neco podobneho delali, jen jde o to je najit ;-)

Napsal: pon 6. zář 2004, 14:16
od pavel.minarik
no, kdysi jsem si naprogramoval něco na obrázky, přejmenovává inkrementálně a čísla doplňuje tuším zezadu, můžu dát zdrojáky, je to v Delphi

Napsal: pon 6. zář 2004, 15:36
od Dony
tohle by šlo celkem jednoduše udělat ve VBScriptu, bylo by to na pár řádků

Napsal: pon 6. zář 2004, 21:07
od J X P
To je super, jenže když to já neumím :-(

Nějaký návod by nebyl ?

Napsal: pon 6. zář 2004, 21:38
od Dony
zejtra ti sem něco hodím

Napsal: úte 7. zář 2004, 09:26
od Dony
Tady máš ten skript, stačí ho dát do souboru s příponou vbs, hoď ho do nadřazenýho adresáře k adresáři, kde chceš přejmenovávat, přepiš konstantu FilesSubdir (do uvozovek, kde je "dir" název toho adresáře, kde chceš přejmenovávát). Pak jsou tam uprostřed dva řádky (začínaj ' ffilact... ), nad nima je popis jejich funkce, podle toho, u kterého odstraníš znak ' to bude přejmenovávat. Můžeš si z toho udělat dva skripty, jeden na první "pojmenování" a druhej na přejmenování (podle toho kterej z řádků tam necháš)
Neni tam kontrola, kdyby se při přejmenování vyskytly dva soubory stejného názvu, ale to by se stát nemělo.

Kód: Vybrat vše

const FilesSubdir="dir" 'nazev podadresare, ve kterem se bude prejmenovavat
      Napis   = "Prejmenovat soubory v adresari "& dirtobecleaned &"?"
      Titulek     = "Windows Scripting Host"
Dim intDoIt
Dim fso, fold, ffil, ffilact, num

Randomize
Call Welcome()

  Set fso = CreateObject("Scripting.FileSystemObject")
   Set fold = fso.GetFolder(Fso.getAbsolutePathName("")& "\" & Filessubdir)
     Set ffil = fold.Files
  For Each ffilact in ffil
    num=int(rnd*999)
 ' tenhle radek zajisti ocislovani pri prvnim spusteni (prida cisla pred nazev)
'    ffilact.move(fold.path & "\" & string(3-len(cstr(num)),"0") & cstr(num) & ffilact.name)
 ' tenhle radek zajisti ocislovani pri dalsich spustenich (odebere prida cisla a prida jina)
'    ffilact.move(fold.path & "\" & string(3-len(cstr(num)),"0") & cstr(num) & right(ffilact.name,len(ffilact.name)-3))
Next

msgbox "Hotovo"

Sub Welcome()
    intDoIt =  MsgBox(Napis, vbOKCancel + vbinformation, Titulek )
    If intDoIt = vbCancel Then WScript.Quit
End Sub 
btw važ si toho, je to skoro půl hodiny práce...

Napsal: úte 7. zář 2004, 12:33
od J X P
No to nemá chybu, super, moc děkuju.

Kdybych tam chtěl ještě přidat za číslo nějaký znak např aby to vypadalo 005_original text.txt a po dokončení aby spustil jiný program, je to složité ?

Jsem tobě i tvému přešlapujícímu avataru zavázán :-)

Pokud by to přidávání znaků bylo moc složité tak to udělám jinak, ale to spuštění programu po dokončení by se šiklo.

Napsal: úte 7. zář 2004, 14:11
od Dony
přidat znak je to nejmenší, stačí to připsat do řádků, který přejmenovávaj...
např:

Kód: Vybrat vše

.....)),"0") & cstr(num) & ffilact.name....
.....)),"0") & cstr(num) & "tohlebudenavic" & ffilact.name....
stačí to do toho řádku pro první přejmenování

na spuštění programu přidej třeba za ten msgbox...

Kód: Vybrat vše

Set WshShell = WScript.CreateObject("WScript.Shell")     
  WshShell.Run("cestaanazevprogramu")

Napsal: úte 7. zář 2004, 14:44
od J X P
Tak jsem to tam takto vložil

Kód: Vybrat vše

......
msgbox "Prijemnou jizdu" 

Set WshShell = WScript.CreateObject("WScript.Shell")      
  WshShell.Run("D:\Program Files\18 WoS Across America\aa.exe")

Sub Welcome() 
    intDoIt =  MsgBox(Napis, vbOKCancel + vbinformation, Titulek ) 
    If intDoIt = vbCancel Then WScript.Quit 
End Sub
přejmenování proběhne v pořádku, ale program se nespustí, hodí to tuhle hlášku

Skript: C:\.........\radio.vbs
Řádek: 21
Znak: 3
Chyba: Systém nemůže nalézt uvedený soubor

Kód: 80070002
Zdroj: (null)

Cestu jsem zadal správně a odkazovaný exe soubor v tom adresáři existuje, co je špatně ?

P.S. Vím že jde ve Win XP zkopírovat chybovou hlášku přímo do clipboardu, jen si nemůžu vzpomenout jakou kombinací kláves .... ufff, nevíš ?

Napsal: úte 7. zář 2004, 15:31
od pavel.minarik
alt+print_screen

Napsal: úte 7. zář 2004, 15:38
od Dony
zkus si tu cestu zkopírovat ze zástupce k tomu souboru, určitě tam, máš překlep...

Napsal: úte 7. zář 2004, 16:16
od J X P
Tak už jsem na to přišel. Musí tam být zadaná cesta bez závorky a ve 3 úvozovkách, uff

vypadá to takhle:

Kód: Vybrat vše

...... 
msgbox "Prijemnou jizdu" 

Set WshShell = WScript.CreateObject("WScript.Shell")      
  WshShell.Run """D:\Program Files\18 WoS Across America\aa.exe"""

Sub Welcome() 
    intDoIt =  MsgBox(Napis, vbOKCancel + vbinformation, Titulek ) 
    If intDoIt = vbCancel Then WScript.Quit 
End Sub
To jsou věci mezi nebem a zemí :-)

Napsal: úte 7. zář 2004, 19:54
od Dony
mě to taky došlo, je to jako kdybys to napsal do příkazovýho řádku bez úvozovek, to za první mezerou by interpretovalo jako argument programu -> chyba, takže se to musí uzavřít úvozovkama navíc, aby výslednej řetězec měl úvozovky (že jsou tři je daný syntaxí basicu)

Napsal: úte 7. zář 2004, 22:26
od J X P
přesto ti velice děkuju, je vidět, že jako nový mod tafy budeš velice prospěšný :-).