Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Soft na hromadné přejmenování souborů v adresáři podle názvu adresáře?

Tak tady to je:

 Dim fso, f, sf, sfl, folder, file, filelist, counter, warning, stary, novy
  path = InputBox("Zadejte cestu k nadřazenému adresáři ve kterém se nachází adresáøe s obrázky")
  warning = MsgBox("Budou přejmenovány soubory v podadresářích tohoto adresáře: " & path & ". Je to správně?", 276, "Poslední záchrana") 
  if warning = 6 then
  	Set fso = CreateObject("Scripting.FileSystemObject")
  	Set f = fso.GetFolder(path)
  	Set sf = f.SubFolders
  	For Each folder in sf
		counter = 1
		Set sfl = fso.GetFolder(folder)
		set filelist = sfl.Files
		Wscript.echo " "
		Wscript.echo "Adresář " & folder
		Wscript.echo "číslo - starý název - nový název"
		Wscript.echo "==============================================================================="
		For Each file in filelist
			stary = file
			novy = folder & "\" & folder.Name & Right("0000" & CStr(counter),4) & "." & Right(stary,3)
			fso.MoveFile stary, novy
			wscript.echo counter & " - " & stary & " - " & novy
			counter = counter + 1
		next

	  next
 	Wscript.echo "Akce provedena!"
  Else
  	Wscript.echo "Akce byla zrušena!"
 	
  end if

ulož si to jako "něco.vbs" a doporučuju spouštět pomocí příkazu cscript něco.vbs v konzoli CMD.

Chyby které jsem neodladil: Čas od času se mi stane, že první přejmenování (pro mě nepochopitelně) vezme při volání metody sfl.Files (tj. při načítání jmen souborů) i sobory, které "teprve budou" ::) - jak kdyby během vnitřní smyčkou ještě jednou aktualizoval -> z toho plyne, že se může stát, že číslování nepůjde od 0001, ale od vyššího čísla. Nicméně druhé spuštění skriptu proběhne už ok. Jsem zmaten, vysvětlí mi to někdo? (Přece jen nejsem VBS guru :-) ) Ještě mě napadá přepsat to pomocí WMI, ale to se mi už nechce :-D

Možné úpravy: Pokud se z obou cyklů vyhážou všechny Wscript.echo výpisy do konzoly, je možné pohodlně spouštět skript pomocí wscript (tj. poklikáním na ikonku), ale pak není žádný záznam o činnosti skriptu. Dále je možno změnit počet nul v číslování - postačí změnit poslední číslovku ve funci Right("0000" & CStr(counter),4) na požadovanou hodnotu (nyní jsou 4)

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny