Gå til innhold

Kan noen forenkle dette scriptet?


Anbefalte innlegg

Følgende script sjekker hvilken bokstav som er min mp3 spiller (leter etter "denne.txt" på samtlige disker. D er utelukket)

 

Jeg ønsker at dersom den ikke finner noen disker så skal den overføre til en default mappe (den er REM merket). Det som skjer er at den går helt ned til bunnen istedet for og utføre goto start

 

Hva gjør jeg feil og er det noen enklere måte å lage dette scriptet på?

 

Klikk for å se/fjerne innholdet nedenfor
@echo off
title mp3 kopierer
if exist c:\denne.txt set mal=c:\
if mal==c:\ goto start
if exist e:\denne.txt set mal=e:\
if mal==e:\ goto start
if exist f:\denne.txt set mal=f:\
if mal==f:\ goto start
if exist g:\denne.txt set mal=g:\
if mal==g:\ goto start
if exist h:\denne.txt set mal=h:\
if mal==h:\ goto start
if exist i:\denne.txt set mal=i:\
if mal==i:\ goto start
if exist j:\denne.txt set mal=j:\
if mal==j:\ goto start
if exist k:\denne.txt set mal=k:\
if mal==k:\ goto start
if exist l:\denne.txt set mal=l:\
if mal==l:\ goto start
if exist m:\denne.txt set mal=m:\
if mal==m:\ goto start
if exist n:\denne.txt set mal=n:\
if mal==n:\ goto start
if exist o:\denne.txt set mal=o:\
if mal==o:\ goto start
if exist p:\denne.txt set mal=p:\
if mal==p:\ goto start
if exist q:\denne.txt set mal=q:\
if mal==q:\ goto start

REM set mal=c:\

cls
:start
cls
Echo kopierer til %mal%
pause
:loop
cls
set /P lol=kilde:
copy "%lol%" "%mal%"
move "*.mp3" "%mal%\Root"
move "*.wma" "%mal%\Root"
move "*.wav" "%mal%\Root"
goto loop

Lenke til kommentar
Videoannonse
Annonse

if mal== er fjernet :)

 

Men jeg vil at dette skal gjøres av seg selv :)

 

Jeg forsøkte med å sette "set mal=nei" helt på starten og en "if mal==nei goto standard"

Men selv om den ikke finner denne.txt slik at den setter en label så ignorerer den "if mal==nei" kommandoen. Hvorfor?

Lenke til kommentar

resultatet:

Klikk for å se/fjerne innholdet nedenfor
@echo off

title mp3 kopierer

SET MAL=

if exist c:\denne.txt set mal=c:\

if exist e:\denne.txt set mal=e:\

if exist f:\denne.txt set mal=f:\

if exist g:\denne.txt set mal=g:\

if exist h:\denne.txt set mal=h:\

if exist i:\denne.txt set mal=i:\

if exist j:\denne.txt set mal=j:\

if exist k:\denne.txt set mal=k:\

if exist l:\denne.txt set mal=l:\

if exist m:\denne.txt set mal=m:\

if exist n:\denne.txt set mal=n:\

if exist o:\denne.txt set mal=o:\

if exist p:\denne.txt set mal=p:\

if exist q:\denne.txt set mal=q:\

echo c til q

IF ()==(%MAL%) GOTO STANDARD

echo label start

:start

Echo kopierer til %mal%

pause

:loop

if mal==nei goto standard

cls

set /P lol=kilde:

copy "%lol%" "%mal%"

move "*.mp3" "%mal%\Root"

move "*.wma" "%mal%\Root"

move "*.wav" "%mal%\Root"

goto loop

 

:standard

echo label standard

set mal="C:\Documents and Settings\Thor\Skrivebord\mp3"

goto start

 

Men det samme skjer. Jeg klarer ikke skjøne hvorfor. Om du er grei så tester du det på din egen maskin ved å for eksempel lagre denne i en egen mappe et sted og lager en "denne.txt" rett på c for eksempel og tester om det bare er min pc som gjør noe feil :)

Lenke til kommentar

Du introduserer if mal==nei goto standard i loopen din for å bryte den, men det finnes ingen setning i hele programmet som noen ganger setter mal=nei, noe som betyr at loopen er uendelig.

Og IF ()==(%MAL%) GOTO STANDARD vil være negativ hele tiden om jeg ikke tar feil nå, og er derfor helt meningsløs.

Hvorfor bruker du en loop? Skal du gjenta kopieringen til flere mapper? Og hvorfor bruker du først copy, og så move?

 

Her er de feilene jeg har funnet så langt:

Klikk for å se/fjerne innholdet nedenfor

@echo off

title mp3 kopierer

SET MAL=

if exist c:\denne.txt set mal=c:\

if exist e:\denne.txt set mal=e:\

if exist f:\denne.txt set mal=f:\

if exist g:\denne.txt set mal=g:\

if exist h:\denne.txt set mal=h:\

if exist i:\denne.txt set mal=i:\

if exist j:\denne.txt set mal=j:\

if exist k:\denne.txt set mal=k:\

if exist l:\denne.txt set mal=l:\

if exist m:\denne.txt set mal=m:\

if exist n:\denne.txt set mal=n:\

if exist o:\denne.txt set mal=o:\

if exist p:\denne.txt set mal=p:\

if exist q:\denne.txt set mal=q:\

echo c til q

IF ()==(%MAL%) GOTO STANDARD

echo label start

:start

Echo kopierer til %mal%

pause

:loop

if mal==nei goto standard

cls

set /P lol=kilde:

copy "%lol%" "%mal%"

move "*.mp3" "%mal%\Root"

move "*.wma" "%mal%\Root"

move "*.wav" "%mal%\Root"

goto loop

 

:standard

echo label standard

set mal="C:\Documents and Settings\Thor\Skrivebord\mp3"

goto start

 

Det er mulig jeg har misforstått hva du ønsker at programmet skal gjøre, og det er mulig jeg har glemt korrekt bruk av xcopy, men her er min versjon:

 

Klikk for å se/fjerne innholdet nedenfor

@ECHO OFF
CLS
TITLE MP3 Kopiering
SET DEST="C:\Documents and Settings\Thor\Skrivebord\mp3"
IF EXIST c:\denne.txt SET DEST="c:\"
IF EXIST e:\denne.txt SET DEST="e:\"
IF EXIST f:\denne.txt SET DEST="f:\"
IF EXIST g:\denne.txt SET DEST="g:\"
IF EXIST h:\denne.txt SET DEST="h:\"
IF EXIST i:\denne.txt SET DEST="i:\"
IF EXIST j:\denne.txt SET DEST="j:\"
IF EXIST k:\denne.txt SET DEST="k:\"
IF EXIST l:\denne.txt SET DEST="l:\"
IF EXIST m:\denne.txt SET DEST="m:\"
IF EXIST n:\denne.txt SET DEST="n:\"
IF EXIST o:\denne.txt SET DEST="o:\"
IF EXIST p:\denne.txt SET DEST="p:\"
IF EXIST q:\denne.txt SET DEST="q:\"

SET /P SRC=Skriv inn kildebane:
ECHO Kopierer fra %SRC% til %DEST%\Root\ ...
MD %DEST%\Root
XCOPY "%SRC%" "%DEST%\Root" /E

:END

 

Psuedokoden blir slik:

 

1. Set destinasjon-banen til "C:\Documents and Settings\Thor\Skrivebord\mp3".

2. Om filen "denne.txt" finnes på en stasjon skal destinasjon-banen endres til stasjonbokstaven, hvis ikke skal destinasjon-banen forbli uendret (se 1.)

3. Få brukeren til å oppgi kilde-banen.

4. Lag undermappen "Root" i destinasjon-banen.

5. Kryss-kopier alt innholdet fra kilde-banen til undermappa "Root" i destinasjons-banen, inkl. alle undermapper.

6. Avslutt.

 

PS. Eneste grunnen til at jeg opererer med ei undermappe Root er fordi du har det i ditt program, og jeg tenkte det var en hensikt med dette. Men dette kan såklart endres eller fjernes helt slik at kopieringen skjer direkte til destinasjon-banen.

 

Håper dette var til hjelp :)

Endret av skag1
Lenke til kommentar

Nå skal jeg svare på flere av dine spørsmål skag1.

 

Dette scriptet lagde jeg for jeg var lei av musikken jeg hadde på muvoen. På toppen av det hele er musikken min fordelt på mange mapper så det er tungvindt å navigere seg frem hver gang man finner en god sang. Derfor, når jeg har denne oppe og finner en "go'sang" så høyreklikker jeg filen og velger "View file info" og kopierer stien til musikkfilen og limer inn i cmd promptet. Etter endt kopiering så blir den flyttet til sin mappe "root". Om det ligger andre filer enn musikkfiler på muvoen så havner de ikke i mp3 mappen.

 

 

mitt system:

finner en bra sang

Starter dette scriptet ved en hothey

kopierer filinformasjonen og limer inn i "mp3 kopierer"

scriptet kopierer filen til *:\

scriptet flytter alle lydfiler som støttes av muvoen til "Root"

de resterende filene (burde) flyttes til "diverse" (bare jeg hadde klart å ekskludere .bat)

Scriptet går tilbake til labelen "loop" og er klar for en ny filkopiering.

 

 

Og takk skag1. Jeg glemte helt at det bare var å plassere set mal="C:\Documents and Settings\Thor\Skrivebord\mp3" helt på starten for så å la resten av diskene komme etterpå. Da var det løst :)

Endret av Thor.
Lenke til kommentar

Ah, da har jeg misforstått. :)

Men istedet for at du må høyreklikke på filer, kopiere og lime inn banen, så kan du jo heller lage shell-integrasjon for batch-programmet. Da kan du høyreklikke på ei fil og fra dropdown-menyen velge f.eks "Kopier til root..." så vil batch-programmet ditt selv finne ut banen for fila og kopiere og ordne alt for deg, og til slutt lukke seg selv automatisk. :)

I batch er det %1 som er programargumenter (filbanen i dette tilfellet, og bruk %1 %2 %3 %4 osv om du har flere argumenter adskilt ved mellomrom), så du må modifisere programmet ditt til å kopiere %1 til %MAL%\Root.

 

Her fant jeg informasjon om hva du må legge til i systemregistret ditt for å ordne shell-integrasjon.

Endret av skag1
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...