vraagje over dos (TXT aanroepen met variable)

Status
Niet open voor verdere reacties.

Brummos

Gebruiker
Lid geworden
24 apr 2007
Berichten
49
ik ben bezig met een automatisch zip batch programma en dat lukt aardig (het zippen attans) alleen werkt het automatische er nog niet aan:D

nu heb ik verschillende list files met daarin de bestanden die gezipt moeten worden. als ik op 1 of andere manier deze list files kan aanroepen en kan zorgen dat hij ze 1 voor 1 langs gaat totdat ie ze allemaal heeft gehad, dan ben ik klaar.

dus ik dacht. ik maak een extern txt bestand waar ik alle bestands namen van de list files in gooi en zeg dat elke regel in de txt de variable naam krijgt. vervolgens met een batch bestandje het txt aanroepen en zeggen dat de variable gezipt moet worden.

maar hoe de piep doe ik dit?:shocked:

hoop dat een of andere pro dit weet:p
 
c:\progra~1\WinZip\winzip32 backup.zip @c:\backup\filelist.txt

dan zou hij alles wat in de filelist staat moeten backuppen
 
c:\progra~1\WinZip\winzip32 backup.zip @c:\backup\filelist.txt

dan zou hij alles wat in de filelist staat moeten backuppen

ja dat snap ik wel dat heb ik nu ook.

ff nog een keer kort het verhaal:

ik heb een txt met daarin een lijst woorden, deze woorden zijn allemaal apart de variable %weetikveel%, nu wil ik dat hij ze 1 voor 1 op pakt in mijn zip pad zet en dan de bestanden gaat zippen die bij dat pad horen.

dus dan krijg ik een pad

c:\progra~1\WinZip\WZZIP -A c:\test\%weetikveel%\test\zip.zip @listfile

hoe krijg ik het zo dat ik een txt heb met een lijst woorden en dat mijn batch bestand deze woorden allemaal apart de naam %weetikveel% geeft en dan 1 voor 1 ze kopieerd naar het pad?
 
Laatst bewerkt:
Ha Brummos,

Misschien iets in deze richting?

For /F "Delims=" %%a IN (lijstmetwoorden.txt) DO (
c:\progra~1\WinZip\WZZIP -A c:\test\%%a\test\zip.zip @listfile
)

De lijstmetwoorden.txt bevat woorden (namen van de dirs) ieder op een nieuwe regel. Voorbeeld:

windows
dos
weetikveel
weetikwel
progra~1

Volgens mij als je Program Files tussen "" zet, dus "Program Files" ipv progra~1 werkt het ook allemaal.

"c:\program files\WinZip\WZZIP" -A c:\test\%%a\test\zip.zip @listfile (dacht ik, natte vinger werk)

Grt, Jos :shocked:
 
Ha Brummos,

Misschien iets in deze richting?

For /F "Delims=" %%a IN (lijstmetwoorden.txt) DO (
c:\progra~1\WinZip\WZZIP -A c:\test\%%a\test\zip.zip @listfile
)

De lijstmetwoorden.txt bevat woorden (namen van de dirs) ieder op een nieuwe regel. Voorbeeld:

windows
dos
weetikveel
weetikwel
progra~1

Volgens mij als je Program Files tussen "" zet, dus "Program Files" ipv progra~1 werkt het ook allemaal.

"c:\program files\WinZip\WZZIP" -A c:\test\%%a\test\zip.zip @listfile (dacht ik, natte vinger werk)

Grt, Jos :shocked:


WOW:shocked:

dit werkt fantastisch! ik ben het nog een beetje aan het finetunen zodat het werkt op mijn batch bestandje, maar ik laat je zeker horen of het uiteindelijk werkt.

dankjewel jos:thumb:
 
OK, het werkt wel. maar niet naar voldoening. Ik denk ook al te weten waarom, omdat ik iets aan het bouwen ben wat ik beter in visual basic kan bouwen ofzo:D

For /F "Delims=" %%a IN (typenumber.txt) DO (
C:\progra~1\WinZip\WZZIP -A H:\desktop\%%a\zip.zip @listfile
)

Dit werkt fantastsch, maar waar ik eigenlijk heen wil is dit:

For /F "Delims=" %%a,%%b IN (typenummer.txt,levernummer.txt) DO (
C:\progra~1\WinZip\WZZIP -A H:\desktop\%%a\%%b.zip @listfile
)

je ziet dat ik in 1 opdracht regel 2 variabelen heb. dus moeten deze ook eerst gedefineerd worden voordat die de opdracht gaat uitvoeren. alleen werkt het nu niet meer. en ik krijg het idee dat het FOR command maar 1 variable te gelijk aan kan en dan al de opdracht regel uitvoerd waardoor hij niet het goede path krijgt.

ik heb trouwens meerdere opstelling in de opdracht regel geprobeerd maar ik heb de goede nog niet te pakken.

misschien dat jij het weet jos:D
 
Ha die Brummos,

Een lastige waar ik zo 1-2-3 geen oplossing voor heb. Misschien dat je hier een beetje op voort kunt borduren.

For /F "Delims=" %%a IN (typenummer.txt) DO (
Set Trand=%random%
Set Ttime=%time:~,2%%time:~3,2%%time:~6,2%%time:~9,2%
Echo c:\%%a\%Ttime%%Trand%_%%a.zip
)

Met bovenstaand voorbeeld krijg je wel unieke bestandsnamen :confused:

Bij For /F "Delims=" kun je trouwens ook gebruik maken van een scheidingsteken die je gebruikt in de externe tekstfile om woorden te scheiden. Vb in 1ste regel: Windows,Explorer,exe. Je moet dan tussen "Delims= en " een komma plaatsen (of een ander teken), dus "Delims=,"

Onderstaand voorbeeld laat alleen Windows zien. Hoe je de rest van de splitting kan laten tonen (Explorer en exe) weet ik helaas niet.

For /F "Delims=," %%a IN (typenummer.txt) DO (
Echo %a


Grt, Jos :shocked:
 
Volgens mij alweer een stukje verder Brummos. Probeer het volgende maar eens:

FOR /F "tokens=1,2,3 delims=," %%G IN (levernummer.txt) DO (
dir >> %%G_%%H.%%I
)


levernummer.txt bevat dan zoiets als (dir,subdir,zipbestandsnaam):

windows,desktop,mijnbestand
data,usr,nieuws
novell,groupwise,rss


En dat resulteerd in:

FOR /F "tokens=1,2,3 delims=," %%G IN (levernummer.txt) DO (
Call "C:\program files\WinZip\WZZIP" -A H:\%%G\%%H\%%I.zip @listfile
)


De Time uit mijn vorige bericht blijft ook wel een interessante ivm het maken van backups. :thumb:

Set Ttime=%time:~,2%%time:~3,2%%time:~6,2%%time:~9,2%
FOR /F "tokens=1,2,3 delims=," %%G IN (levernummer.txt) DO (
Call "C:\program files\WinZip\WZZIP" -A H:\%%G\%%H\%%I_%Ttime%.zip @listfile
)


En natuurlijk de Random functie. :thumb:

Het zit hem dus in de tokens. Gevonden op http://www.ss64.com/nt/for_f.html. Zie kopje 'Tokens'

Hoe je variabelen uit meerdere bestanden kan gebruiken is mij nog niet duidelijk. Geef mij eigenlijk maar ASP, kan allemaal eenvoudiger met het FileSystem Object. Moet je natuurlijk wel admin rechten hebben.

Grt, Jos :shocked:
 
En ja, daar ben ik weer met volgens mij de juiste oplossing dankzij mijn mailcontact met Rob van der Woude, www.robvanderwoude.com :thumb:

De volgende code werkt goed, uitgebreid getest ;)

Batch file (.bat of .cmd):

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET Counter=1
FOR /F "tokens=1-3 skip=1 delims=," %%A IN (config.txt) DO (
SET Myn_drive!Counter!=%%A
SET Myn_dir!Counter!=%%B
SET My_file!Counter!=%%C
SET /A Counter = !Counter! + 1
REM ECHO WinZip "%%A:\%%B\%%C.zip" *** deze regel was voor het testen ***
Call "C:\program files\WinZip\WZZIP" -A "%%A:\%%B\%%C.zip @listfile
)
ENDLOCAL


Belangrijk schijnt wel te zijn dat je de batch file afsluit met ENDLOCAL.

Het commando skip=1 hoeft er niet per se tussen, default is 0 dus ook als je skip= weglaat. Ik gebruik het in dit voorbeeld zodat je in de config.txt een tekstregel voor eigen gebruik erbij kunt plaatsen. skip=1 slaat de 1ste regel over en begint pas bij regel 2 in te lezen. skip=2 slaat 2 regels over, etc.

%%A = driveletter
%%B = (sub)directory's gescheiden door \
%%C = bestandsnaam, in bovenstaand voorbeeld zonder .zip

Config.txt bevat dan zoiets als:

[Configuratie] <= deze zal worden geskipt door skip=1
c,program files\uploads,data
d,inetpub\ftproot\users,leesmij
h,data,backup
x,system\backups,mijnwerk


De komma's worden in de batch file bij delims=," gesplit.

Het zal er dan zo gaan uitzien bij het uitvoeren:

Call "C:\program files\WinZip\WZZIP" -A "c:\program files\uploads\data.zip @listfile
Call "C:\program files\WinZip\WZZIP" -A "d:\inetpub\ftproot\users\leesmij.zip @listfile
Call "C:\program files\WinZip\WZZIP" -A "h:\data\backup.zip @listfile
Call "C:\program files\WinZip\WZZIP" -A "x:\system\backups\mijnwerk.zip @listfile


Volgens mij kun je de lijst in config.txt behoorlijk uitbreiden.

Als je de output niet wilt laten tonen kun je volgens mij gebruik maken van >nul, dus:

Call "C:\program files\WinZip\WZZIP" -A "%%A:\%%B\%%C.zip @listfile >nul

Hier is ook nog goede informatie te vinden, http://www.ss64.com/nt/for_f.html

Grt, Jos :shocked:
 
Laatst bewerkt:
zo zo jos, je bent lekker bezig geweest:thumb:

ik zal er binnekort ff naar kijken, het is namelijk voor me werk en er is ff wat tussen gekomen.

maar ik denk er zeker wel wat aan te gaan hebben en ik laat het snel horen.

greetz
 
nou jos, het werkt volgens mij goed en doet precies wat ik wil:D :thumb:

nu heb ik het natuurlijk wel wat aangepast:

: DFLCOMMAND
SETLOCAL ENABLEDELAYEDEXPANSION
SET Counter=1
FOR /F "tokens=4,5 skip=0 delims=\" %%A IN (DFLLIST.txt) DO (
SET Myn_dir!Counter!=%%A
SET My_file!Counter!=%%B
SET /A Counter = !Counter! + 1
IF NOT EXIST G:\BA.ZIP\%%A MKDIR G:\BA.ZIP\%%A
C:\Progra~1\WinZip\WZZIP -A -M G:\BA.ZIP\%%A\lev%%B.zip @G:\BA\BLDDATA\%%A\%%B.dfl
)
MOVE G:\BA\BLDANAL\%%A\%%B.dfl G:\BA.ZIP\%%A
IF NOT EXIST G:\BA.ZIP\%%A\lev%%B.zip GOTO FALSE2
ENDLOCAL
ECHO.

je ziet dat de drive letter variable weg is, deze is altijd een vast gegeven bij mij. en je ziet dat er wat dingen zijn toegepast. ik heb ook de delims=, verander naar een /, want zo kan je een heel gewoon pad gebruiken en die opsplitsen, zonder dat je handmatig er komma's van moet maken en door het gebruik van tokens kan je zeggen welk deel tussen de / / je wilt hebben.

nu is er alleen 1 probleem:

de variable %%B, is met deze opstelling lev(nummer).dfl, want zo word hij in de config.txt opgeslagen (die ik dfllist.txt noem). maar nu heb ik alleen dat nummer gedeelte nodig. want anders gaat me zip bestand lev(nummer).dfl.zip heten. en dat is niet de bedoeling, want hij moet (nummer).zip gaan heten.

((nummer).zip zijn zip bestanden met levering informatie erin die naar de klant worden mee gezonden bij de levering.)

nu ben ik al wat gaan proberen met de edlin command. maar nog geen resultaat, dus dat laat ik nog ff weten.

verder is dit precies wat ik zocht, dankjewel jos:thumb:
 
Laatst bewerkt:
Ha Brummos,

Misschien zoiets?

: DFLCOMMAND
SETLOCAL ENABLEDELAYEDEXPANSION
SET Counter=1
FOR /F "tokens=4,5 skip=0 delims=\" %%A IN (DFLLIST.txt) DO (
SET Myn_dir!Counter!=%%A
SET My_file!Counter!=%%B
SET /A Counter = !Counter! + 1
IF NOT EXIST G:\BA.ZIP\%%A MKDIR G:\BA.ZIP\%%A
SET Bestand=%%B
SET Bestand=%Bestand:.dfl=%
<= .dfl vervangen door niets.
C:\Progra~1\WinZip\WZZIP -A -M G:\BA.ZIP\%%A\lev%Bestand%.zip @G:\BA\BLDDATA\%%A\%Bestand%.dfl
)

Geen flauw idee of het werkt. :confused:

Hier het testje die ik heb geprobeerd:

@Echo Off
Set Bestand=10001.dfl.zip
Echo.
Echo Oud bestand: %Bestand%
Echo.
Set Bestand=%Bestand:.dfl.zip=.zip%
Echo.
Echo Nieuw bestand: %Bestand%


Meer info: http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/a5cb19ecb71008c3/923423bf3143fcdd

Grt, Jos :shocked:
 
Laatst bewerkt:
Nou.....

@Echo Off
Set Bestand=10001.dfl.zip
Echo.
Echo Oud bestand: %Bestand%
Echo.
Set Bestand=%Bestand:.dfl.zip=.zip%
Echo.
Echo Nieuw bestand: %Bestand%


Dit werk uiteraard:p

maar zodra ik dit implementeer en zeg dat hij van de variable %%B %bestand% moet maken en dan moet wijzigen (de extensie) dan krijg ik geen eens een filename meer te zien.

dus ik denk dat van een variabele een andere variablele maken en dan die weer aanpassen. ik denk dat het te veel is voor dos om uit te rekekenen. maar ik ben er nog druk mee bezig

EDIT: ik kom er niet uit.

: DFLCOMMAND
SETLOCAL ENABLEDELAYEDEXPANSION
SET Counter=1
FOR /F "tokens=4,5 skip=0 delims=\" %%A IN (DFLLIST.txt) DO (
SET Myn_dir!Counter!=%%A
SET My_file!Counter!=%%B
SET /A Counter = !Counter! + 1
IF NOT EXIST G:\BA.ZIP\%%A MKDIR G:\BA.ZIP\%%A
C:\Progra~1\WinZip\WZZIP -A -M G:\BA.ZIP\%%A\lev%%B.zip @G:\BA\BLDDATA\%%A\%%B.dfl
)
MOVE G:\BA\BLDANAL\%%A\%%B.dfl G:\BA.ZIP\%%A
IF NOT EXIST G:\BA.ZIP\%%A\lev%%B.zip GOTO FALSE2
ENDLOCAL
ECHO.

kan ik niet zorgen dat de rood gemaakte dingen een 2 zijdige varibele worden? %iets% ofso. want ik denk dat ik dan wel verder kan met het aanpassen van de variable. ik denk omdat het een 1 zijdige variabele is, dat hij zich niet zomaar laat aanpassen.

Zodra ik er namelijk 2 zijdige variabelen van maak, start me batch bestand niet eens meer op
 
Laatst bewerkt:
Beste Brummos,

Misschien moet je even contact opnemen met Rob van der Woude, http://www.robvanderwoude.com/contact.html. Hij reageert meestal redelijk snel. Even vragen of hij eens een oog wil werpen op http://www.helpmij.nl/forum/showthread.php?t=303760.

Ik heb allerlei testjes gedaan maar kom er zo 1-2-3 niet uit. Het zal best op te lossen zijn.
Ik ga vrijdag op vakantie (kramperen) dus kan niet reageren of ze moeten wireless hebben. Hoewel, ik ga op vakantie om weg te zijn van systeembeheer en programmeren. :p

Bijna 9 uur later en misschien is dit een idee?

: DFLCOMMAND
SETLOCAL ENABLEDELAYEDEXPANSION
SET Counter=1
FOR /F "tokens=4,5 skip=0 delims=\" %%A IN (DFLLIST.txt) DO (
SET Myn_dir!Counter!=%%A
SET My_file!Counter!=%%B
SET My_newfile!Counter!=%My_file!Counter!:.dfl=%
IF NOT EXIST G:\BA.ZIP\%%A MKDIR G:\BA.ZIP\%%A
C:\Progra~1\WinZip\WZZIP -A -M G:\BA.ZIP\%%A\lev%My_newfile!Counter!%.zip @G:\BA\BLDDATA\%%A\%%B.dfl
SET /A Counter = !Counter! + 1
)
MOVE G:\BA\BLDANAL\%%A\%%B.dfl G:\BA.ZIP\%%A
IF NOT EXIST G:\BA.ZIP\%%A\lev%%B.zip GOTO FALSE2
ENDLOCAL
ECHO.

Grt, Jos :shocked:
 
Laatst bewerkt:
:D dat had ik ook al geprobeerd, maar dat werkt niet

ik ga wel ff kijken of rob me wil helpen.

i.i.g veel plezier met kramperen:p en geniet maar van het niet op te hoeven lossen van andermans problemen;)

greetz
 
Ok ik heb nu dit:

SETLOCAL enabledelayedexpansion
SET Counter=1
FOR /F "tokens=4,5 skip=1 delims=\" %%A IN (G:\BA\ZIP_Utils\DFLLIST.txt) DO (
SET Myn_dir!Counter!=%%A
SET My_file!Counter!=%%~nB
SET /A Counter = !Counter! + 1
IF NOT EXIST C:\test\%%A MKDIR C:\test\%%A
C:\Progra~1\WinZip\WZZIP -A C:\test\%%A\%%~nB.zip @G:\BA\BLDDATA\%%A\%%B
)
ENDLOCAL

mijn variable %%B is verandert naar %%~nB (dit haalt de extensie weg) maar nu bestaat me variable nog uit LEV(nummer).

Weet iemand misschien iets om het gedeelte LEV weg te halen, ik moet alleen het nu7mmer overhouden.:confused:
 
Nou mijn probleem is opgelost:d :d

Maar ik denk dat dit niet de oplossing is die voor idereen gaat werken....helaas. Ik had zelf ook liever een andere oplossing bedacht. Maar Dos heeft gewoon te veel beperkingen.

Mijn oplossing:

:BFLCOMMAND
SETLOCAL ENABLEDELAYEDEXPANSION
SET Counter=1
FOR /F "tokens=4,6 delims=\" %%A IN (G:\BA\ZIP_Utils\BeZipped\Bin\BFLLIST.txt) DO (
SET Myn_dir!Counter!=%%A
SET My_file!Counter!=%%~nB
SET /A Counter = !Counter! + 1
IF NOT EXIST G:\BA.ZIP\%%A MKDIR G:\BA.ZIP\%%A
C:\Progra~1\WinZip\WZZIP -A -M G:\BA.ZIP\%%A\%%~nB.zip1 @G:\BA\BLDANAL\%%A\data\%%B
IF NOT EXIST G:\BA.ZIP\%%A\%%~nB.zip1 GOTO FALSE2
RENAME G:\BA.ZIP\%%A\lev*.zip1 DBF*.zip
MOVE G:\BA\BLDANAL\%%A\data\%%B G:\BA.ZIP\%%A

Het gene in het rood is de oplossing. Ik probeerde een variabele te strippen naar alleen een bruikbaar deel aangezien de rest overbodig was en niet goed. zoals je kan zien is dit niet gelukt. Maar ik heb gewoon op het eind gezegd dat de oude naam gerenamed moet worden naar wat anders. en hierdoor heb ik toch de goede naam kunnen krijgen.

Aangezien dit nog steeds in de local zit, doet hij dit voor elk bestand dat hij tegen komt. doe je dit buiten de local. dan doet hij dit niet meer aangezien hij zijn variabele dan kwijt is.

Nogmaals dit is geen oplossing voor het probleem dat beschreven is in deze topic, maar toevallig is dit wel een oplossing voor mijn probleem.

ik dank u allen en vooral jos the man die me erg geholpen heeft.

3 hoeraaatjes voor Jos :thumb: hoera hoera hoera :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan