19. juni 2004 - 20:35Der 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 ==============================================
Hmm og det er ikke til MS' dos men 4dos, undskyld :-)
Synes godt om
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.
Synes godt om
Slettet bruger
19. juni 2004 - 21:02#7
Så prøv at rette set Password=%9 shift/8 set Formattype=%10
<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...
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.
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..!) ;-)
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 ?
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 ...
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.