Hur skulle de kunna se ut om man skulle vilja ha ett rename kommando i en bat fil Såg att det redan låg en post i nybörjarforumet. där verkade det löst. <b>Hur skulle de kunna se ut om man skulle vilja ha ett rename kommando i en bat fil</b> Eftersom du säger att du inte är såvärst duktig så har VB ett kommando inbyggt som du kanske vill titta på. Det heter "NAME". <b>Så testa kommandot Name "c:\*.bat", "*.txt"</b>Rename via bat fil
ex.
minapp.exe -C:\Program
så döper den om alla filer i katalogen med filnamn.txt till filnamn"DatumTid".txt
är inte så värst duktig på programering men har behov av funktionen och hittar ingen annan lösning.
//TorfiSv: Rename via bat fil
Tog bort min rysslösning:)
/BSv: Rename via bat fil
Antar att du faktiskt vill ha en batfil trots att du skriver i VB-delen...
Det är faktiskt enkelt:
Kolla upp FOR kommandot som du kan köra, hjälpen skriver du till en fil genom att köra "for /? >> forhelp.txt" i en kommandoprompt. Där ser du precis hur en sådan fungerar.
Genom att köra "FOR /f %i in ('dir /b *.*') DO echo %i" i en kommandoprompt så listar du alla filnamn som finns.
<info>
FOR /f %%i in ('dir /b *.*') DO (
FOR /f "tokens=1,2 delims=." %%m in ("%%i") DO (
rename "%i" "%mdatumtid.%n"
)
)
)
</info>
OBS, du skall använda enkla % när du kör ifrån en prompt och dubbla om du lägger koden i en batfil...
Skulle du istället skriva
<info>
FOR /f %%i in ('dir /b *.*') DO (
FOR /f "tokens=1,2 delims=." %%m in (%%i) DO (
rename "%i" "%mdatumtid.%n"
)
)
)
</info>
så skulle du gå igenom varje rad i filen %%i.
OBS, detta är exempel på hur man skulle kunna göra och allt är inte gjort i svaret...
<info>
FOR /f %%i in ('dir /b *.*') DO (
FOR /f "tokens=1,2 delims=." %%m in ("%%i") DO (
if exists %%m.%%n (
@echo %%m %%n
pause
)
)
)
</info>
Listar varje fil med namnet och ändelsen separerade och pausar mellan varje fil.
Det som INTE finns är tex att kontrollera så att enbart filer visas (dir /b /a:-d *.* fixar iofs det) och att de innehåller "." som används som delimiter. hänsyn tas ej heller till om det finns flera "." i filnamnet(loppa.min.txt kommer att bli loppaDTAUMTID.min.txt) mm. Sv: Rename via bat fil
Så testa kommandot Name "c:\*.bat", "*.txt"Sv:Rename via bat fil
Fusklösning ju... ;-)
Han skrev ju att han ville ha det i en batfil och där fungerar inte name(iaf inte på den NT4 burk jag sitter på just nu). Däremot skulle man kunna använda "rename *.txt *DatumTid.txt" eller kanske rentutav "rename *.* *DatumTid.*"(lite osäker på om den andra lösningen faktiskt fungerar). Det skript som jag har ovan struntar i vilka filändelser filerna har och tar alla filer i en katalog.
<info>
@echo off
goto start
*******************************************************************
* En batfil som döper om filer.... *
* Börjar med att sätta aktuellet datum till en variabel och tidpunkt till en variabel. *
*******************************************************************
:start
FOR /f "tokens=1,2,3,4,5 delims=/ " %%i in ('date /t') DO (
set mydate = %%l%%k%%j
)
FOR /f "tokens=1,2 delims=:" %%i in ('TIME /t') DO (
set mytime = %%i%%j
)
FOR /f %%i in ('dir /b *.*') DO (
FOR /f "tokens=1,2 delims=." %%m in ("%%i") DO (
rename %%i "%%m%mydate%%mytime%.%%n"
echo "Name change on %%i to %%m%mydate%%mytime%.%%n"
)
)
goto end
:end
@echo on
</info>
OBS, jag har inte teskört den men i stort sett borde den fungera... ;-)
Varför göra det enkelt för sig när man kan göra det med batfiler som är så mycket roligare? ;-)
Edit: Insåg att jag i min iver när jag läste order batfil tolkade allt fel... Han vill ha ett program som tar en inparameter (sökväg till katalog) och som kan startas från kommandoprompt eller batfil. :-(
Roligare med bat ju... ;-)
Men eftersom bat är kul så fixas lösningen till enligt nedan.
<info>
@echo off
goto start
*******************************************************************
* En batfil som döper om filer.... *
* Börjar med att sätta aktuellet datum till en variabel och tidpunkt till en variabel. *
*******************************************************************
:start
FOR /f "tokens=1,2,3,4,5 delims=/ " %%i in ('date /t') DO (
set mydate = %%l%%k%%j
)
FOR /f "tokens=1,2 delims=:" %%i in ('TIME /t') DO (
set mytime = %%i%%j
)
pushd %1
FOR /f %%i in ('dir /b *.*') DO (
FOR /f "tokens=1,2 delims=." %%m in ("%%i") DO (
rename %%i "%%m%mydate%%mytime%.%%n"
echo "Name change on %%i to %%m%mydate%%mytime%.%%n"
)
)
goto end
:end
popd
@echo on
</info>
Detta innebär:
1. batfilen kan startas utan parametrar och körs då i aktuell katalog
2. batfilen kan startas från kommadoprompt eller en annan batfil med mybat.cmd "c:\temp"
Vill man göra en funktion som tar i underliggande kataloger är det enkelt att lägga till en till FOR-loop som tar "dir /a:d /b" som kommando.