http://www.xbmcfreak.nl/
[ Gathering of Tweakers ] [ GitHub ]
http://www.xbmcfreak.nl/
[ Gathering of Tweakers ] [ GitHub ]
Ik wil dit gebruiken in een script.
De bestandsnamen (sql scripten) verschillen namelijk soms. Daarom moet ik nu alles handmatig uitvoeren. Dit wil ik automatiseren. De output wil ik meenemen in het osql commando.
[ Voor 16% gewijzigd door Erhnam op 09-05-2005 10:54 ]
http://www.xbmcfreak.nl/
Ik heb onlangs een programmaatje (Batch file creator) gemaakt die aan de hand van een directory bepaalde batch file kan maken. Je kan het gratis downloaden op http://bits.bultena.com.
[ Voor 50% gewijzigd door Johnny Goodbye op 09-05-2005 10:55 ]
Dan zit het opgeslagen in een text file maar dan zit het nog niet in een variable.Johnny Goodbye schreef op maandag 09 mei 2005 @ 10:52:
de oplossing : dir a*.* > filex.txt om het naar een text file te krijgen of dir a:*.* > prn voor printer
http://www.xbmcfreak.nl/
1
2
3
4
5
6
7
8
9
10
11
| c:\>dir a*.*
De volumenaam van station C is CEDS
Het volumenummer is B0FA-026F
Map van c:\
04-05-2005 08:18 <DIR> ADFJ2EE
03-05-2005 15:55 <DIR> appl
14-10-2004 16:02 0 AUTOEXEC.BAT
1 bestand(en) 0 bytes
2 map(pen) 27.379.491.840 bytes beschikbaar |
Hij wil dus alles onder "c:\>dir a*.*" als variabele opslaan in een batch script, maar ik ben bang dat dat niet kan. Tenzij je een manier kan vinden om regel voor regel door een text file door te spitten mbv een batch.
My lungs taste the air of Time
Blown past falling sands
Weet niet of dit wat uitmaakt. Het is geen array (lijst me bestandsnamen). Er staat namelijk maar altijd maar 1 bestandje in de directory. Alleen weet ik hier niet van wat precies de naam is. Vandaar deze vraag.Apie! schreef op maandag 09 mei 2005 @ 10:56:
code:
1 2 3 4 5 6 7 8 9 10 11c:\>dir a*.* De volumenaam van station C is CEDS Het volumenummer is B0FA-026F Map van c:\ 04-05-2005 08:18 <DIR> ADFJ2EE 03-05-2005 15:55 <DIR> appl 14-10-2004 16:02 0 AUTOEXEC.BAT 1 bestand(en) 0 bytes 2 map(pen) 27.379.491.840 bytes beschikbaar
Hij wil dus alles onder "c:\>dir a*.*" als variabele opslaan in een batch script, maar ik ben bang dat dat niet kan. Tenzij je een manier kan vinden om regel voor regel door een text file door te spitten mbv een batch.
http://www.xbmcfreak.nl/
rename alle file(s) naar een bekende file. Dus:
ren *.* script.ql
programma.exe script.sql
[ Voor 6% gewijzigd door Johnny Goodbye op 09-05-2005 11:05 ]
bijvoorbeeld
1
| for /d %%i in (fiction, general, humor, learning, misc) do call :doelijst "%%i" "%1" |
Kijk even verder bij het for (/?) commando hoe je ook door bestanden en andere gewenste constructies iterereerd.
[ Voor 10% gewijzigd door SilentStorm op 09-05-2005 11:09 . Reden: typo ]
Localhost is where the heart is
Verwijderd
1
| FOR /F %i in ('dir locatie /B /A:-D') do set var=%i |
Uiteraard in de batch zelf tweemaal % gebruiken ipv 1
Je kan zelfs als het meerdere bestanden zijn een do call loop doen om dan zo per bestand een procedure uit te voeren
Dan staat er nog steeds "dir *.*" in %test%, dus dat is ook geen oplossing
Ik neem dus niet aan dat je commando overweg kan met wildcards? Anders kunt je gewoon die wildcards aan je opdracht voeren.
Ik weet niet hoe het met command.com zit, maar als je in bash (linux) een * op de commandline meegeeft aan iets dan gaat bash dat voor je verwerken tot een rij bestandsnamen die op de commandline weer meegegeven worden aan je opdracht (daar is dus bash degene die de wildcard expand tot filenames).
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Ja en? TS wil dat de output van de environment variabele getoond wordt. En op deze manier werkt dat zoals hij wilt. De output is namelijk gewoon de de output van "dir *.*".Paul Nieuwkamp schreef op maandag 09 mei 2005 @ 21:58:
[...]
Dan staat er nog steeds "dir *.*" in %test%, dus dat is ook geen oplossing
En om terug te komen op het osql commando van TS: dit zou bijv iets kunnen zijn:
1
2
3
4
5
| SET server=servername SET user=administrator SET password=geheim cmd /c osql.exe -S %server% -U %user% -P %password% -i test.sql |
(kan dus ook zonder de "cmd /c")
[ Voor 29% gewijzigd door Microkid op 09-05-2005 22:19 ]
4800Wp zonnestroom met Enphase
Life's a waste of time. Time's a waste of life. Get wasted all the time and you'll have the time of your life.
Nee, als ik het goed begrijp wil hij die output op een commandline meegeven aan een opdrachtMicrokid schreef op maandag 09 mei 2005 @ 22:14:
[...]
Ja en? TS wil dat de output van de environment variabele getoond wordt. En op deze manier werkt dat zoals hij wilt. De output is namelijk gewoon de de output van "dir *.*".
Dat hij er als voorbeeld een echo bijzet is leuk en aardig maar daar is al (terecht) over opgemerkt dat hij dan beter meteen dat commando kan uitvoeren.
De vraagstelling laat zich dan ook vertalen naar "Hoe doe ik de `` van bash onder dos?"
Ik heb geen idee wat osql is (al gok ikd at het iets met databases te maken heeft
Als alternatief kun je (mits het niet erg is dat die osql-opdracht per bestand een keer uitgevoerd wordt) osql aanroepen in een FOR-lus, meer opties zie ik zo ook niet
"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock
Hmm, ik intrepreteer het anders. Wellicht kan TS zijn vraag wat nader toelichten?Paul Nieuwkamp schreef op maandag 09 mei 2005 @ 22:31:
[...]
Nee, als ik het goed begrijp wil hij die output op een commandline meegeven aan een opdracht
Dat hij er als voorbeeld een echo bijzet is leuk en aardig maar daar is al (terecht) over opgemerkt dat hij dan beter meteen dat commando kan uitvoeren.
4800Wp zonnestroom met Enphase
Life's a waste of time. Time's a waste of life. Get wasted all the time and you'll have the time of your life.
Verwijderd
Dus graag opheldering
Verwijderd
je script werkt niet (lees de for /? nog maar eens). wat jou script doet is de laatste output van dir in de var zettenVerwijderd schreef op dinsdag 10 mei 2005 @ 12:10:
Als het de bedoeling is om de gevonden bestanden in een variabele te zetten, lukt mijn script perfect. En dat is was ik kan afleiden uit zijn vraag.
Dus graag opheldering
[ Voor 81% gewijzigd door Verwijderd op 11-05-2005 11:47 ]
Verwijderd
Je gebruikt een call loop met als extra parameter de %i die je uit de for-loop haalt.
In de call loop gebruik je %1 om deze terug op te vragen
Onderstaand voorbeeld:
1
2
3
4
5
6
7
8
| for /F "tokens=*" %i in ('dir /B /A:-D') do call testloop %i
goto :EOF
:testloop
set var=%1
echo %var%
:
:EOF |
Zal schoon voor elke file onder die directory, de naam als variabele gebruiken, het gevraagde doen, en dan de volgende in de lijst nemen.
Verwijderd
zo doe tie het nog niet, maar dat zal ik maar op schoonheids foutjes houden...Verwijderd schreef op woensdag 11 mei 2005 @ 15:10:
Toch wel
Je gebruikt een call loop met als extra parameter de %i die je uit de for-loop haalt.
In de call loop gebruik je %1 om deze terug op te vragen
Onderstaand voorbeeld:
code:
1 2 3 4 5 6 7for /F "tokens=*" %i in ('dir /B /A:-D') do call testloop %i goto :EOF :testloop set var=%1 echo %var% :EOF
Zal schoon voor elke file onder die directory, de naam als variabele gebruiken, het gevraagde doen, en dan de volgende in de lijst nemen.
%i moet %%i zijn in batch.
"tokens=*" gebruikt de default delimiter oftewel een spatie.
een call in for loop naar een label moet een ":" voorstaan.
:eof is nu slechts een label, om terug te keren naar loop moet er "goto :eof" staan (:eof = end of file)
set var=%1 kapt de variable af bij een spatie, dus als je een goede delim gekozen hebt om de hele string te gebruiken gaat het nog hier mis (%* gebruiken).
[ Voor 4% gewijzigd door Verwijderd op 11-05-2005 17:01 ]
Verwijderd
Idd, ik was te rapVerwijderd schreef op woensdag 11 mei 2005 @ 16:59:
[...]
zo doe tie het nog niet, maar dat zal ik maar op schoonheids foutjes houden...
Zal mij leren het niet rap even na te kijken