Avatar billede medusa Nybegynder
19. juni 2004 - 20:35 Der er 19 kommentarer og
3 løsninger

Switch i en cmd-fil (batch program)

Jeg skal have tilføjet endnu en parameter til en lille cmd-fil, men er løbet ind i problemer med antallet af parametre. Jeg skal have tilføjet det 10. parametre, men har aldrig programmeret cmdfiler før, og trods omfattende søgning på nettet, virker min switch ikke som jeg troede (eller også er det If'en som fejler noget)?. Er der nogen som kan hjælpe med switch. Linierne med *** er dem jeg har tilføjet. (det er i win2000).


@echo off
rem ==============================================
rem
rem Destination and credentials
rem
rem Denne kommandofil tager følgende parametre:
rem
rem  - 1 - Filnavn der skal sendes (fuldt stinavn)
rem  - 2 - Filnavn hos modtageren (kun filens navn)
rem  - 3 - Katalog den skal køres fra (fuldt stinavn)
rem  - 4 - identifikation på dokumentet der sendes (dokuments guid)
rem  - 5 - Destination hvortil filen skal sendes
rem  - 6 - Modtagers katalog eller NODIR hvis ingen katalog
rem  - 7 - "J" hvis fil skal PUTes og RENAMEs, "N" hvis bare PUT
rem  - 8 - Brugernavn / userid
rem  - 9 - password
rem  - 10 - ascii ("A") eller binær ("B")
rem ----------------------------------------------

d:
set filenamesend=%1
set filenamereceive=%2
cd %3
set ident=%4
set Destination=%5
set Katalog=%6
set Rename=%7
set UserID=%8
set Password=%9
shift/8
set Formattype=%10


rem ==============================================
rem
rem Datafile must be in same directory as this
rem  command file.
rem
rem Delete old log files and
rem  check for data file name
rem
rem ----------------------------------------------
cd .
if exist ..\log\SendFile%ident%.lo_ del ..\log\SendFile%ident%.lo_
if exist ..\log\SendFile%ident%.log del ..\log\SendFile%ident%.log
if exist ..\log\SendFile%ident%.ok del ..\log\SendFile%ident%.ok
if exist ..\log\SendFile%ident%.error del ..\log\SendFile%ident%.error
if .%filenamesend%.==.. goto Exit_Error
if not exist %filenamesend% goto Exit_Error

rem ==============================================
rem
rem Build FTP script file
rem
rem ----------------------------------------------
echo open %destination%> ..\log\SendFile%ident%.script
echo %UserId%>> ..\log\SendFile%ident%.script
echo %Password%>> ..\log\SendFile%ident%.script
***shift /8
***if (%Formattype%)==(A) echo ascii>> ..\log\SendFile%ident%.script | echo bin>> ..\log\sendFile%ident%.script
echo hash>> ..\log\SendFile%ident%.script
if !%Katalog%==!DSAB2BNODIR GOTO NOREMKAT
echo cd %Katalog%>> ..\log\SendFile%ident%.script
:NOREMKAT
IF !%Rename%==!J GOTO PUTRENAME
echo put %filenamesend% %filenamereceive%>> ..\log\SendFile%ident%.script
GOTO ENDPUT
:PUTRENAME
echo put %filenamesend% %filenamereceive%.tmp>> ..\log\SendFile%ident%.script
echo rename %filenamereceive%.tmp %filenamereceive%>> ..\log\SendFile%ident%.script
:ENDPUT
echo quit>> ..\log\SendFile%ident%.script

rem ==============================================
Avatar billede thesurfer Nybegynder
19. juni 2004 - 20:45 #1
Jeg er ikke ekspert på området, men så vidt jeg ved, er parameterene fra %0 til og med %9. Dvs 10 i alt.
%0 plejer at være bat-filnavnet.
Avatar billede majsmarken Nybegynder
19. juni 2004 - 20:52 #2
Hvad betyder denne "shift /8" ?


if (%Formattype%)==(A) echo ascii>> ..\log\SendFile%ident%.script | echo bin>> ..\log\sendFile%ident%.script

Jeg tror ikke at du ka' lave en sådan if/then/else på den måde ?
Du må nok lave det af 2 omgange:

if (%Formattype%)==(A) echo ascii>> ..\log\SendFile%ident%.script
if (%Formattype%)==(B) echo bin>> ..\log\SendFile%ident%.script

Sådan tyder jeg det. Tænk over det - evt. prøv ?
Avatar billede majsmarken Nybegynder
19. juni 2004 - 20:53 #3
Jeg ser lige nu at <theseufer> også skrev.
Det er vist rigtigt nok at du kun kan bruge parameter op til %9 ...
Avatar billede Slettet bruger
19. juni 2004 - 20:56 #4
Som jeg læser denne http://www.jpsoft.com/help/index.htm?batchparms.htm kan man have op til 255 parametre eller er jeg gal på den?
Avatar billede Slettet bruger
19. juni 2004 - 20:59 #5
Hmm og det er ikke til MS' dos men 4dos, undskyld :-)
Avatar billede Slettet bruger
19. juni 2004 - 21:01 #6
Men på denne side http://labmice.techtarget.com/articles/batchcmds.htm
står følgende
Working with more than 10 command-line parameters
You can also use the shift command to create a batch file that can accept more than 10 parameters. If you specify more than 10 parameters on the command line, those that appear after the tenth (%9) will be shifted one at a time into %9.

Så det må betyde at efter en shift ligger parameter 10 i %9 som jeg ser det.
Avatar billede Slettet bruger
19. juni 2004 - 21:02 #7
Så prøv at rette
set Password=%9
shift/8
set Formattype=%10

til

set Password=%9
shift/8
set Formattype=%9
Avatar billede majsmarken Nybegynder
20. juni 2004 - 09:52 #8
Hi <medusa> og andre ang. BATCH/CMD: Check venligst http://www.eksperten.dk/spm/492056
Avatar billede majsmarken Nybegynder
20. juni 2004 - 09:58 #9
<medusa>:
Du bør kunne bruge SHIFT mellem hver - eksempelvis:

set filenamesend=%1
SHIFT
set filenamereceive=%1
SHIFT 
cd %1
SHIFT
set ident=%1
SHIFT 
set Destination=%1
SHIFT 
set Katalog=%1
SHIFT 
set Rename=%1
SHIFT 
set UserID=%1
SHIFT 
set Password=%1
SHIFT 
set Formattype=%1


Så ka' du have "uendelige" mange argumenter med...

???
Avatar billede thesurfer Nybegynder
20. juni 2004 - 13:30 #10
"<medusa>:"? Der er ikke nogen, der hedder "medusa", der deltager i dette spm..? :-)
Avatar billede majsmarken Nybegynder
20. juni 2004 - 15:10 #11
... hvem startede denne tråd ?
Avatar billede thesurfer Nybegynder
20. juni 2004 - 15:12 #12
hehehe.. ja, ok..
Men teknisk set har jeg jo ret, idet medusa ikke har skrevet nogen indlæg :-)
Avatar billede majsmarken Nybegynder
20. juni 2004 - 15:36 #13
... nu får vi se hvornår han/hun reagerer...
Avatar billede medusa Nybegynder
21. juni 2004 - 08:08 #14
rolig nu drenge. Forsøgte at skrive en kommentar igår, men det gik ikke så godt da computeren pludselig ikke var så samarbejdsvillig.

Men altså.
shift /8 betyder såvidt jeg har læst på nettet at de parametre før 8 ikke bliver påvirket af shift, hvilket jeg synes var smart...hvis det altså virker.
Mht if-else burde det jo faktisk virke (http://labmice.techtarget.com/articles/batchcmds.htm), dog skal jeg revurdere brugen af | istedet for else. Det tester jeg lige af.
Avatar billede medusa Nybegynder
21. juni 2004 - 10:06 #15
Hmm, det var ikke lige det jeg troede der var galt, men det ser ud til at det var min if-else som ikke virkede.... Man kan altså ikke bruge else, selvom det jo egentlig er det de skriver på nettet. Nå, men nu ser det ud til at virke, og jeg er glad.

ps: medusa er en mytologisk figur fra grækenland (vist nok). med slanger istedet for hår, og var i stand til at gør mænd til statuer når de så hende i øjnene. Cool! (bare lidt info..gæt hvilket køn jeg så er..!) ;-)
Avatar billede medusa Nybegynder
21. juni 2004 - 10:07 #16
PPS. hvem skal have point? Ingen har jo teknisk set svaret, kun kommenteret.
Avatar billede majsmarken Nybegynder
21. juni 2004 - 10:18 #17
Det var så på "et eller andet plan" denne: [majsmarken 19/06-2004 20:52:02 kommentar] med if/then/else så ikke rullede så godt ?
Hvad blev så den "endelige" metode/løsning ?
Avatar billede medusa Nybegynder
21. juni 2004 - 10:24 #18
Resultat:

rem ----------------------------------------------

d:
set filenamesend=%1
set filenamereceive=%2
cd %3
set ident=%4
set Destination=%5
set Katalog=%6
set Rename=%7
set UserID=%8
set Password=%9
shift /8
set Formattype=%9
...
echo open %destination%> ..\log\SendFile%ident%.script
echo %UserId%>> ..\log\SendFile%ident%.script
echo %Password%>> ..\log\SendFile%ident%.script
if (%Formattype%)==(A) echo ascii>> ..\log\SendFile%ident%.script
if (%Formattype%)==(B) echo bin>> ..\log\sendFile%ident%.script
echo hash>> ..\log\SendFile%ident%.script
...
Avatar billede majsmarken Nybegynder
21. juni 2004 - 10:35 #19
Tja - That's One Way To Do It...

Har du tilfældigvis noget input/links ang denne: http://www.eksperten.dk/spm/492056 ?
Avatar billede Slettet bruger
21. juni 2004 - 13:12 #20
Jamen jeg svarer da gerne på baggrund af 19/06-2004 21:02:13
Avatar billede medusa Nybegynder
21. juni 2004 - 17:56 #21
<majsmarken> Jeg er absolut ikke en haj til denne type programmering, og jeg har muligvis ikke helt forstået dit problem (hård dag), men kig evt her: http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/percent.asp , måske kan det give dig et hint.
Avatar billede majsmarken Nybegynder
21. juni 2004 - 18:14 #22
En express kik på http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/percent.asp
viser faktisk noget jeg ka' bruge...
Skal lige nærlæses/afprøves

TAK for "kampen"...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester