Batch file - output opslaan als variable

Pagina: 1
Acties:
  • 209 views sinds 30-01-2008
  • Reageer

  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:21

Erhnam

het Hardware-Hondje :]

Topicstarter
Onder unix weet ik dat dit mogelijk is maar ik vroeg mij af of dit onder windows ook mogelijk is. Zoeken op internet geeft mij veel resultaten maar niet het gewenste. Ik wil het volgende:

SET TEST=dir a*.*
echo %TEST%

Is zoiets mogelijk onder windows?

http://www.xbmcfreak.nl/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:17

TeeDee

CQB 241

Wat werkt er niet dan?

code:
1
2
3
@ECHO OFF
SET TEST=dir a*.*
echo %TEST%

Geeft mij een prachtige "dir a*.*" terug op mijn commandline.

[ Voor 74% gewijzigd door TeeDee op 09-05-2005 10:46 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Mr. Happy
  • Registratie: Januari 2002
  • Laatst online: 01-12-2025
Wat wil je als output hebben???

[ Gathering of Tweakers ] [ GitHub ]


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:21

Erhnam

het Hardware-Hondje :]

Topicstarter
Hij print nu "dir a*.*" op het scherm. Wat ik wil is dat hij de output van dit commando print, de gevonden file(s)

http://www.xbmcfreak.nl/


  • Mr. Happy
  • Registratie: Januari 2002
  • Laatst online: 01-12-2025
dan geef je toch gewoon: dir a*.* als commando... :?

[ Gathering of Tweakers ] [ GitHub ]


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:21

Erhnam

het Hardware-Hondje :]

Topicstarter
Mr_Happy schreef op maandag 09 mei 2005 @ 10:50:
dan geef je toch gewoon: dir a*.* als commando... :?
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/


  • Johnny Goodbye
  • Registratie: Augustus 2003
  • Laatst online: 02-04 16:47
de oplossing : dir a*.* > filex.txt om het naar een text file te krijgen of dir a:*.* > prn voor printer


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 ]


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:21

Erhnam

het Hardware-Hondje :]

Topicstarter
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
Dan zit het opgeslagen in een text file maar dan zit het nog niet in een variable.

http://www.xbmcfreak.nl/


  • Apie!
  • Registratie: Januari 2000
  • Laatst online: 09-03 19:55

Apie!

Newer, better & confusinger

code:
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


  • Erhnam
  • Registratie: Januari 2000
  • Laatst online: 22:21

Erhnam

het Hardware-Hondje :]

Topicstarter
Apie! schreef op maandag 09 mei 2005 @ 10:56:
code:
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.
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.

http://www.xbmcfreak.nl/


  • Johnny Goodbye
  • Registratie: Augustus 2003
  • Laatst online: 02-04 16:47
Als je altijd maar 1 bestand krijgt kan je het ook via een 'dirty trick' doen

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 ]


  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 18-03 14:45

SilentStorm

z.o.z

Bij mijn weten is het niet mogelijk linefeeds of returns op te nemen in een set variabele. Ik heb hier zelf ook wel mee gewerkt en kon eigenlijk alles doen wat ik wilde door of de output in een bestand op te slaan, of door de directory's te itereren met een for lus (for /d)

bijvoorbeeld
code:
1
for /d %%i in (fiction, general, humor, learning, misc) do call :doelijst "%%i" "%1"
is een regel die ik gebruik om door een gedeelte van mijn audiobooks te itereren om er een lijst van te maken. Met pushd en popd kun je de directory bijhouden waar je bent. Voor de duidelijkheid: in de %%i variabele komt de huidige directory. Die %1 was in dit geval nodig om het pad naar het outputbestand mee te geven. Je kunt de directory's ook vervangen door een * als je geen filter wilt gebruiken.

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

Ik gebruik dat thans genoeg

code:
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

  • Microkid
  • Registratie: Augustus 2000
  • Laatst online: 22:07

Microkid

Frontpage Admin / Moderator PW/VA

Smile

Simpel :)

code:
1
2
set test=dir *.*
cmd /c %test%

[ Voor 9% gewijzigd door Microkid op 09-05-2005 21:31 ]

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.


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:33
Microkid schreef op maandag 09 mei 2005 @ 21:30:
Simpel :)

code:
1
2
set test=dir *.*
cmd /c %test%
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


  • Microkid
  • Registratie: Augustus 2000
  • Laatst online: 22:07

Microkid

Frontpage Admin / Moderator PW/VA

Smile

Paul Nieuwkamp schreef op maandag 09 mei 2005 @ 21:58:
[...]
Dan staat er nog steeds "dir *.*" in %test%, dus dat is ook geen oplossing :)
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 *.*".

En om terug te komen op het osql commando van TS: dit zou bijv iets kunnen zijn:
code:
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.


  • Paul
  • Registratie: September 2000
  • Laatst online: 18:33
Microkid 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 *.*".
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.

De vraagstelling laat zich dan ook vertalen naar "Hoe doe ik de `` van bash onder dos?" :) (staat vrijwel letterlijk in de ts: "Ik weet dat het in Unix kan, maar kan het ook in Dos" :) )

Ik heb geen idee wat osql is (al gok ikd at het iets met databases te maken heeft :P) maar ik gok dat het geen wildcards ondersteunt, anders was dit topic er niet :P
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


  • MadMarky
  • Registratie: Augustus 2001
  • Niet online

MadMarky

Begint eer ge bezint

Is XSET niet iets voor de TS? Het is een utility die een soort uitbreiding biedt op de standaardfuncties van DOS, vooral het omgaan met variabelen wordt een stuk makkelijker.

🖥️ | 🚗


  • Microkid
  • Registratie: Augustus 2000
  • Laatst online: 22:07

Microkid

Frontpage Admin / Moderator PW/VA

Smile

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.
Hmm, ik intrepreteer het anders. Wellicht kan TS zijn vraag wat nader toelichten?

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

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 :)

Verwijderd

output van een commando gebruiken >> for /f gebruiken
Verwijderd 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 :)
je script werkt niet (lees de for /? nog maar eens). wat jou script doet is de laatste output van dir in de var zetten :)

[ Voor 81% gewijzigd door Verwijderd op 11-05-2005 11:47 ]


Verwijderd

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
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

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
7
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.
zo doe tie het nog niet, maar dat zal ik maar op schoonheids foutjes houden...


%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 ]


  • sanfranjake
  • Registratie: April 2003
  • Niet online

sanfranjake

Computers can do that?

(overleden)
Over welk OS hebben we het? Dan zet ik dat per de Windows Operating Systems - Policy nog even in de topictitel :)

Mijn spoorwegfotografie
Somda - Voor en door treinenspotters


Verwijderd

Verwijderd schreef op woensdag 11 mei 2005 @ 16:59:
[...]


zo doe tie het nog niet, maar dat zal ik maar op schoonheids foutjes houden...
Idd, ik was te rap :)
Zal mij leren het niet rap even na te kijken
Pagina: 1