09. juni 2003 - 19:37Der er
26 kommentarer og 1 løsning
Program til windows.
Jeg leder efter et program der kan hente en fil i et bibbliotek og smide det i et andet.
Det kan jeg lave via lidt dos programmering. Problemet er bare at den fil som skal hentes hedder det samme, men skal hedde noget andet end de filer den allerede har hentet.
Altså..
Filen hedder players.txt (eller doc)
Og den skal så kopieres med mellemrum til en anden mappe.. og hedde fks. players1.txt players2.txt osv. så man ikke overskriver den sidste.
Det er en backup fil, og er til at se ip'er på en spille server. (delta force:task force dagger)
Kan man lave det i dos, eller er der nogle der har en idé?
I Windows NT/2000/XP kan man lave noget i stil med følgende: <code> @echo off setlocal set next=0 for /F %%i in ('dir /B player???.txt') do call :do_it %%i set /A next= 1 + %next% echo copy player.txt player%next%.txt
endlocal goto :eof
:do_it
set xxx=%1 set xxx=%xxx:~6% set xxx=%xxx:~0,-4% if %xxx% GTR %next% set next=%xxx% </code> Bemærk at dette script ikke flytter filen til en anden mappe, men kun kopierer den til en nyt filnavn. Men det kan let ændres til at flytte filen til en anden mappe. Den linie hvor kopieringen sker er følgene: echo copy player.txt player%next%.txt Jeg har puttet en echo ind først, så den skriver kommandoen på skærmen i stedet for at udfører den, slet ordet echo når du er færdig med at teste.
Du kan bruge DOS kommandoen AT, til at skedulere batch-filen til at køre med jævne mellemrum. Skriv "help at" i en kommando-prompt for at finde ud af hvordan.
Ja, det er dos, det der står mellem <code> & </code> skal puttes i en batch-fil (dvs. en fil med extension bat eller cmd). For at teste kan du lave en mappe med en player.txt fil en player1.txt og en player2.txt, og putte batch-filen i denne mappe. Når du så kører scriptet skulle der gerne stå: copy player.txt player3.txt
hmm.. det virker ikke.. har lavet en mappe smidt programmet ind som .bat fil lavet et par players(1,2).txt men der sker intet når man trykker på knappen.. andet at man lige når at ane at bat filen åbner.
Ups, min fejl. Hedder den fil der skal kopieres player.txt eller players.txt? I det følgende har jeg gået ud fra at den hedder player.txt, hvis den hedder players.txt skal du rette copy linien og første linie efter :do_it Ny version: <code> @echo off setlocal set next=0 for /F %%i in ('dir /B player*.txt') do call :do_it %%i set /A next= 1 + %next% echo copy player.txt player%next%.txt
endlocal goto :eof
:do_it if /I [%1]==[player.txt] goto :eof set xxx=%1 set xxx=%xxx:~6% set xxx=%xxx:~0,-4% if %xxx% GTR %next% set next=%xxx% </code>
Hvis du har problemer med denne version bør du slette første linie (@echo off) inden du laver et screen-dump.
Jeg tror du har glemt selve copy funktionen.. efter hvad jeg kan se ;o) har prøvet at sætte den (copy players.txt players%next%.txt) ind efter "if %xxx% GTR %next% set next=%xxx%"
Men der forhøjer den ikke nummeret, men tilføjer et s til filen.. og efter 10 klik på filen har man altså nogle lange navne ;o)
Æhh.. kan ikke finde ud af hvad det er for en funtion der søger efter den tidliger skrevne fil?? altså så den ikke skriver players1.txt igen og igen.. kan godt se du har lavet en funktion der forhøjer tallet, og en funktion der skriver det forhøjet tal i filen..
Det er utroligt så mange fejl der kan gemme sig i så simpelt script, prøv dette: <code> @echo off setlocal set next=0 for /F %%i in ('dir /B player*.txt') do call :do_it %%i set /A next= 1 + %next% copy players.txt players%next%.txt
endlocal goto :eof
:do_it if /I [%1]==[players.txt] goto :eof set xxx=%1 set xxx=%xxx:~7% set xxx=%xxx:~0,-4% if %xxx% GTR %next% set next=%xxx% </code>
Jaaa nu virker det.. måtte dog lige sætte et s på i "for /F %%i in ('dir /B player*.txt') do call :do_it %%i"
ellers virkede det ikke. Og hvis jeg nu ville have den skulle kopiere filen fra et sted og smide den et andet sted ville copy funktionen vel se sådanne ud :
copy c:\players.txt f:cheaters\players%next%.txt
ikke?? og så hvis man lige lavede linien :
"for /F %%i in ('dir /B player*.txt') do call :do_it %%i"
om til :
for /F %%i in f:cheaters\('dir /B player*.txt') do call :do_it %%i
copy c:\players.txt f:cheaters\players%next%.txt skal være: copy c:\players.txt f:\cheaters\players%next%.txt
for /F %%i in f:cheaters\('dir /B players*.txt') do call :do_it %%i skal laves om til: for /F %%i in ('dir /B f:\cheaters\players*.txt') do call :do_it %%i
<code> @echo off setlocal set next=0 for /F %%i in ('dir /B c:cheaters\players*.txt') do call :do_it %%i set /A next= 1 + %next% copy C:\Programmer\NovaLogic\"Delta Force Task Force Dagger"\players.txt c:\cheaters\players%next%.txt
endlocal goto :eof
:do_it if /I [%1]==[players.txt] goto :eof set xxx=%1 set xxx=%xxx:~7% set xxx=%xxx:~0,-4% if %xxx% GTR %next% set next=%xxx% </code>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.